qsort函数
qsort函数包含在stdlib.h头文件中,使用快速排序算法对数据进行排序。关于快速排序算法,请参考:算法 3:最常用的排序——快速排序。
函数声明
qsort函数的声明如下:
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
参数说明:
- base:需要排序的目标数组名(也可以理解为开始排序的地址,因为可以写成&s[i]这样的表达式)
- nmemb:参与排序的目标数组的元素个数
- size:目标数组单个元素的大小,推荐使用
sizeof(s[0])这样的表达式
- compar:比较函数,规定增序或者降序排列
下面是compar函数的定义:
1 2 3 4 5
| int compar(const void *a, const void *b) { return *(int *)a - *(int *)b; }
|
函数用法
int类型
下面是一段完整的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h> #include <stdlib.h> //包含qsort函数 int compar(const void *a, const void *b); int main(void) { int s[100], n, i; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &s[i]); qsort(s, n, sizeof(s[0]), compar); for (i = 0; i < n; i++) printf("%d ", s[i]); putchar('\n'); return 0; } int compar(const void *a, const void *b) { return *(int *)a - *(int *)b; }
|
输入: 5 10 9 8 7 6
输出: 6 7 8 9 10
char类型
char类型跟int类型相似,只需修改一下compar函数即可:
1 2 3 4
| int compar(const void *a, const void *b) { return *(char *)a - *(char *)b; }
|
double类型
double类型容易错,特别要注意!
double类型的比较函数如下:
1 2 3 4 5
| int compar(const void *a, const void *b) { return *(double *)a > *(double *)b ? 1 : -1; }
|
参考资料:
qsort函数、sort函数 (精心整理篇)