Skip to content
On this page

C语言stdlib.h__qsort函数


标签:clang/std_api  

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 的升序排序。

Last updated: