目录


注:以上信息来源于cplusplus官网
翻译以上信息如下:

qsort函数是c语言标准库中基于快速排序算法实现的一种对数组进行排序的函数,它可以排序任意数据类型。十分简单方便。
- //练习使用库函数,qsort排序各种类型的数据
- //void qsort (void* base, size_t num, size_t size,int (*compar)(const void*, const void*));
qsort函数参数如上:
- #include
- #include
- int compar_int(const void* e1, const void* e2)
- {
- return *(int*)e1 - *(int*)e2;
- }
- int main()
- {
- int arr1[10] = { 8,9,7,6,5,2,3,1,4,10 };
- int sz1 = sizeof(arr1) / sizeof(arr1[0]);
- printf("排序前的顺序为:\n");
- for (int i = 0; i < 10; i++)
- {
- printf("%d ", arr1[i]);
- }
- qsort(arr1, sz1, sizeof(arr1[0]), compar_int);
- printf("\n排序后的顺序为:\n");
- for (int i = 0; i < 10; i++)
- {
- printf("%d ", arr1[i]);
- }
-
- return 0;
- }
- #include
- #include
- int compar_char(const void* e1, const void* e2)
- {
- return *(char*)e1 - *(char*)e2;
- }
- int main()
- {
- char arr2[5] = { 'e','d','c','b','a' };
- int sz1 = sizeof(arr2) / sizeof(arr2[0]);
- printf("排序前的顺序为:\n");
- for (int i = 0; i < 5; i++)
- {
- printf("%c ", arr2[i]);
- }
- qsort(arr2, sz1, sizeof(arr2[0]), compar_char);
- printf("\n排序后的顺序为:\n");
- for (int i = 0; i < 5; i++)
- {
- printf("%c ", arr2[i]);
- }
-
- return 0;
- }
- #include
- #include
- int compar_float(const void* e1, const void* e2)
- {
- return *(float*)e1 - *(float*)e2;
- }
- int main()
- {
- float arr3[5] = { 3.14,3.12,5.25,9.58,1.02 };
- int sz1 = sizeof(arr3) / sizeof(arr3[0]);
- printf("排序前的顺序为:\n");
- for (int i = 0; i < 5; i++)
- {
- printf("%f ", arr3[i]);
- }
- qsort(arr3, sz1, sizeof(arr3[0]), compar_float);
- printf("\n排序后的顺序为:\n");
- for (int i = 0; i < 5; i++)
- {
- printf("%f ", arr3[i]);
- }
-
- return 0;
- }
- #include
- #include
-
- //定义一个结构体类型
-
- //这个语句是定义了一个结构体类型,它的名字是 student,它的成员变量有两个,
- //分别是 char 类型的 name 和 int 类型的 age。
- //这个语句可以用来创建一个表示学生信息的数据类型,但它本身并不创建任何对象。
- struct student
- {
- char name[20];
- int age;
- };
-
- int comapar_student_by_age(const void* e1, const void* e2)
- {
-
- return ((struct student*)e1)->age - ((struct student*)e2)->age;
-
- }
- int main()
- {
- struct student arr4[] = { {"zhangsan",20},{"lisi",15},{"jamo",18} };
- int sz = sizeof(arr4) / sizeof(arr4[0]);
- qsort(arr4, sz, sizeof(arr4[0]), comapar_student_by_age);
- for (int i = 0; i < sz; i++)
- {
- printf("姓名:%s 年龄:%d\n", arr4[i].name, arr4[i].age);
-
- }
- return 0;
- }
通过以上代码我们可以看出在main函数主体部分代码基本相当一致,在使用qsort函数的主要部分就是自己写出一个compar函数来确定比较的方法。
我们来观察一下:



我们可以看出我们只需要在compar函数中将需要排序的两个相邻元素e1和e2类型强制转换为对应的数据类型。
因为void * 空指针不能解引用
以上就是对qsort函数使用的例子和总结,谢谢支持!