avatar

目录
C标准库函数qsort用法

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函数的定义:

cpp
1
2
3
4
5
int compar(const void *a, const void *b)
{
return *(int *)a - *(int *)b; //升序排列,int表示排序数组的元素类型
//return *(int *)b - *(int *)a; //降序排列
}

函数用法

int类型


下面是一段完整的代码:

cpp
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); //声明比较函数 compar()
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); //调用qsort函数
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函数即可:

cpp
1
2
3
4
int compar(const void *a, const void *b)
{
return *(char *)a - *(char *)b;
}

double类型


double类型容易错,特别要注意!

double类型的比较函数如下:

cpp
1
2
3
4
5
int compar(const void *a, const void *b)
{
return *(double *)a > *(double *)b ? 1 : -1;
/*compar返回值为整数,为了防止double返回小数而被丢失,所以用一个判断来返回值*/
}

参考资料:


qsort函数、sort函数 (精心整理篇)

文章作者: 大巴斯基
文章链接: http://nieblog.me/2018/04/21/C标准库函数qsort用法/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CodeTrainer