C语言 -- qsort的简单使用
qsort函数
- 一、介绍
- 二、语法格式
- 三、使用函数
- 从小到大
- 从大到小
- 四、结语
一、介绍
qsort 函数是 C 标准库中的一个通用排序函数,用于对数组进行快速排序。它定义在 <stdlib.h> 头文件中。这个非常灵活,因为它允许用户指定数组的元素类型、数组的大小、要排序的数组部分以及用于比较数组元素的函数。
二、语法格式
我们这里使用MSDN来看看qsort函数的使用说明
文档说明qsort是一个可以快速排序的函数
函数定义了很多形参
我们来一一解释一下:
base:表示需要接受一个待排序数组的首元素地址
num:表示需要接收一个待排序数组的数组大小
width:这个表示这个函数需要知道这个数组元素的元素类型大小是多少,比如int就是4
__cdecl是一个调用约定,这里我们不详细说明。
compare(voide1, voide2):这是一个函数指针,表示需要接受一个函数,并且表明这个函数需要有两个形参,其中一个个形参elem1需要传递数组第一个元素,elem2表示需要传递数组第二个元素。
这里有说明:
当比较后e1 < e2,则返回 <0 的数,比如 -1。后面的同理
三、使用函数
从小到大
int arr_int[] = { 5, 4, 3, 2, 1 };
int num = sizeof(arr_int) / sizeof(arr_int[0]);
这串代码定义了一个int类型的数组,并且通过sizof我们计算出了数组的长度
int cmp_int(const void* elem1, const void* elem2) {return (*(int*)elem1 - *(int*)elem2);
}
根据上面的定义,我们可以得到compare函数的写法。
这里我们定义cmp_int 表示排序int类型的数组(自定义的)
因为void *不能直接解引用
,所以我们需要强制类型转换成 int* 类型的
返回值可以使用 if
来进行判断,但是这里我们可以直接令其相减,可以更加便捷
qsort(arr_int, num, sizeof(arr_int[0]), cmp_int);
最后根据文档的语法
提示,我们可以得到如上的调用格式。
所以完整代码如下:
int cmp_int(const void* elem1, const void* elem2) {return (*(int*)elem1 - *(int*)elem2);
}int main() {int arr_int[] = { 5, 4, 3, 2, 1 };int num = sizeof(arr_int) / sizeof(arr_int[0]);qsort(arr_int, num, sizeof(arr_int[0]), cmp_int);for (int i = 0; i < num; i++) {printf("%d ", arr_int[i]);}printf("\n");return 0;
}
(图片版)
运行后可以得到我们所需要的结果
从大到小
想要从大到小也非常简单,只需要把e1 - e2 改写成e2 - e1
即可
结果如下
四、结语
以上就是qsort函数的简单使用,更多的例子就等你们慢慢实践了。毕竟,实践实践着,你就能对qsort有更加深入的了解。那我们就下篇文章再见了,bye~