Appearance
qsort 是 C 库中提供的一个快速排序函数,用于对数组进行排序。其函数原型为:
c
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));它的参数解释如下:
base:要排序的数组的首地址。nmemb:数组中元素的个数。size:数组中每个元素的大小(以字节为单位)。compar:指向函数的指针,用于确定元素间的顺序,即排序的规则。
下面是一个使用 qsort 函数排序一个整型数组的例子:
c
#include <stdio.h>
#include <stdlib.h> // qsort 函数头文件
// 比较函数,用于规定排序的规则
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b; // 升序排序
// return *(int *)b - *(int *)a; // 降序排序
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int len = sizeof(arr) / sizeof(*arr);
qsort(arr, len, sizeof(int), cmp); // 使用 qsort 排序
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]); // 输出 1 1 2 3 3 4 5 5 5 6 9
}
printf("\n");
return 0;
}值得注意的是,比较函数 compar 必须遵循以下规则: 如果 a 和 b 均指向类型 T 的元素,则 compar(a, b) 返回值的类型必须是 int。 如果 a 值小于 b 值,则函数返回值小于 0。 如果 a 值等于 b 值,则函数返回值等于 0。 如果 a 值大于 b 值,则函数返回值大于 0。 这个比较函数实际上是定义了排序规则,可以根据需要实现不同的排序方式。
在上面的代码中,通过比较 a 和 b 的大小,来实现数组 arr 的升序排序。