c语言排序函数sort用法

c语言排序函数sort用法

在C语言中,标准库并没有直接提供一个名为sort的排序函数。然而,GNU C Library (glibc) 和其他一些C库提供了 qsort 函数,它是一个通用的快速排序函数。qsort 函数位于 <stdlib.h> 头文件中。

以下是 qsort 函数的原型及其使用示例:

函数原型

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

参数说明

  • base:指向待排序数组的指针。
  • nmemb:数组中元素的数量。
  • size:每个元素的大小(以字节为单位)。
  • compar:指向用于比较两个元素的函数的指针。该函数必须返回一个负值、零或正值,分别表示第一个参数小于、等于或大于第二个参数。

比较函数

比较函数必须接受两个 const void * 类型的参数,并返回一个整数。通常,比较函数会将这些 void 指针转换为适当的类型,然后进行比较。

示例代码

以下是一个使用 qsort 函数对整数数组进行排序的示例:

#include <stdio.h> #include <stdlib.h> // 比较函数,用于整数排序 int compare_ints(const void *a, const void *b) { int int_a = *(int*)a; int int_b = *(int*)b; // 返回负值、零或正值,分别表示 int_a < int_b, int_a == int_b, int_a > int_b return (int_a > int_b) - (int_a < int_b); } int main() { int arr[] = {5, 2, 9, 1, 5, 6}; size_t arr_size = sizeof(arr) / sizeof(arr[0]); // 使用 qsort 函数进行排序 qsort(arr, arr_size, sizeof(int), compare_ints); // 打印排序后的数组 for (size_t i = 0; i < arr_size; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }

运行结果

1 2 5 5 6 9

注意事项

  1. 类型转换:在比较函数中,需要将 void 指针转换为适当的类型。
  2. 稳定性:qsort 不保证排序的稳定性,即如果两个元素相等,它们的相对顺序在排序后可能会改变。
  3. 复杂度:qsort 的平均时间复杂度为 O(n log n)。

通过 qsort 函数,你可以在C语言中实现几乎任何类型的排序,只需提供适当的比较函数即可。