C语言函数——qsort函数的使用
一、qsort函数:
1、定义:
void qsort ( void* base, //待排序数据的起始地址 size_t num, //待排序数据的元素个数 size_t size, //待排序数据元素的大小(单位是字节) int (*compar)(const void*,const void*) //比较2个元素大小的函数指针 ); 对数组的元素进行排序: 对数组中指向的元素进行排序,每个元素的长度为字节,使用函数确定顺序。 此函数使用的排序算法通过调用指定的函数来比较元素对,并将指向这些元素的指针作为参数。该函数不返回任何值,而是通过对其元素进行重新排序来修改所指向的数组的内容。
2、参数:
(1).基础
指向要排序的数组的第一个对象的指针,该对象已转换为 .void*
(2).数字
所指向的数组中的元素数。 是无符号整数类型。base
(3).大小
数组中每个元素的大小(以字节为单位)。 是无符号整数类型。
(4).比较
二、总代码:
1、整型比较:
int compare(const void* p1, const void* p2) { return (*(int*)p1 - *(int*)p2); } void test() { int arr[] = { 3,5,7,2,9,6,1,8,4,10 }; int sz = sizeof(arr) / sizeof(arr[0]); qsort(arr, sz, sizeof(arr[0]), compare); print(arr, sz); }
2、浮点型比较:
int compare(const void* p1, const void* p2) { return (int)(*(double*)p1 - *(double*)p2); } void test() { double arr[] = { 3.2,5.4,7.1,2.3,9.6,6.0,1.1,8.4,4.2,10.1 }; int sz = sizeof(arr) / sizeof(arr[0]); qsort(arr, sz, sizeof(arr[0]), compare); print(arr, sz); }
3、字符串比较:
int compare(const void* p1, const void* p2) { return strcmp((char*)p1, (char*)p2); } void test() { char arr[] = "bgedfac"; int sz = strlen(arr); qsort(arr, sz, sizeof(arr[0]), compare); printf("%s", arr); }
4、结构体比较:
struct stu { char name[10]; int age; }; int compare_name(const void* p1, const void* p2) { return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name); } int compare_age(const void* p1, const void* p2) { return (((struct stu*)p1)->age - ((struct stu*)p2)->age); } void print(struct stu s[],int sz) { for (int i = 0; i < sz; i++) { printf("%s,%d ", s[i].name, s[i].age); } printf(" "); } test() { struct stu s[] = { {"zhangsan",33},{"lisi",22},{"wangwu",44} }; int sz = sizeof(s) / sizeof(s[0]); qsort(s, sz, sizeof(s[0]), compare_name); print(s, sz); qsort(s, sz, sizeof(s[0]), compare_age); print(s,sz); }