赞
踩
目录
qsort()函数是 C 库中实现的快速排序算法,包含在 stdlib.h
头文件中。函数原型如下:
- void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
-
此函数需要四个参数。
对于比较函数,因比较形式的多量化,所以作者就将比较函数交给书写者自行进行编译书写。(以整数类型数组排序举例)
- #include <stdio.h>
- #include <stdlib.h >
-
- void print(int sz, int arr[])
- {
- int i = 0;
- for (i = 0; i < sz; i++)
- {
- printf("%d ", arr[i]);
- }
- printf("\n");
- }
-
- int cmp_int(const void* e1, const void* e2)
- {
- return (int*)e1 - (int*)e2;
- }
-
- int main()
- {
- int arr[3] = { 3,2,1 };
- int sz = sizeof(arr) / sizeof(arr[0]);
- qsort(arr, sz, sizeof(arr[0]), cmp_int);
- print(sz, arr);
- return 0;
- }
注:
int (__cdecl *compare )(const void *elem1, const void *elem2 )
对此,我们知道qsort是一个运用,快排的方式,使得一串数据以低到高,如果,我们需要以高到低呢,这就需要反思维了,我们须知,以低到高,是有与前者大于后者即换,反之不换。那我们就反过来,后者大于前者即换,反之不换。那我们是不是就得到了一串有高到低的数据,于是我们将"e1 - e2";变为"e2 - e1"即可。以上者代码为例,我们将其变为如此即可:
- #include <stdio.h>
- #include <stdlib.h >
-
- void print(int sz, int arr[])
- {
- int i = 0;
- for (i = 0; i < sz; i++)
- {
- printf("%d ", arr[i]);
- }
- printf("\n");
- }
-
- int cmp_int(const void* e1, const void* e2)
- {
- return (int*)e2 - (int*)e1; //重点变化点
- } //-------------------------------
-
- int main()
- {
- int arr[3] = { 3,2,1 };
- int sz = sizeof(arr) / sizeof(arr[0]);
- qsort(arr, sz, sizeof(arr[0]), cmp_int);
- print(sz, arr);
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
-
- struct Stu
- {
- char name[20];
- int age;
- };
-
- int cmp_struct_Stu(const void* e1, const void* e2)
- {
- return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
- }
-
- int main()
- {
- struct Stu arr[3] = { {"zhangsan", 20},{"lisi", 30},{"wangwu", 10} };
- int sz = sizeof(arr) / sizeof(arr[0]);
- qsort(arr, sz, sizeof(arr[0]), cmp_int);
- int i = 0;
- for (i = 0; i < sz; i++)
- {
- printf("%s,%d ", (arr[i]).name, (arr[i]).age);
- }
- printf("\n");
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
-
- void print(int sz, int arr[])
- {
- int i = 0;
- for (i = 0; i < sz; i++)
- {
- printf("%d ", arr[i]);
- }
- printf("\n");
- }
-
- int cmp_int(const void* e1, const void* e2)
- {
- return (int*)e1 - (int*)e2;
- }
-
- int main()
- {
- int arr[3] = { 3,2,1 };
- int sz = sizeof(arr) / sizeof(arr[0]);
- qsort(arr, sz, sizeof(arr[0]), cmp_int);
- print(sz, arr);
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h >
-
- int cmp_char(const void* e1, const void* e2)
- {
- int n = (*(char*)e1 - *(char*)e2);
- return (*(char*)e1 - *(char*)e2);
- }
-
- void print(int sz, char arr[])
- {
- int i = 0;
- for (i = 0; i < sz; i++)
- {
- printf("%c ", arr[i]);
- }
- printf("\n");
- }
-
- int main()
- {
- char arr[3] = { 'b','a','c'};
- int sz = sizeof(arr) / sizeof(arr[0]);
- qsort(arr, sz, sizeof(arr[0]), cmp_int);
- print(sz, arr);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。