C语言中的sort
函数(实际为qsort
)是标准库中用于数组排序的核心工具,通过自定义比较函数实现升序、降序或复杂规则排序。 其核心参数包括待排序数组指针、元素数量、元素大小及比较函数,时间复杂度为,适合大规模数据排序。以下从使用步骤到实例详解其用法:
-
基础用法
引入头文件<stdlib.h>
,定义比较函数:若返回负数,返回正数,相等返回0。例如对整型数组升序排序:c复制
int compare(const void *a, const void *b) { return (*(int*)a - *(int*)b); }
调用
qsort(arr, n, sizeof(int), compare)
即可完成排序。 -
降序与自定义规则
修改比较函数逻辑即可实现降序:c复制
int compare_desc(const void *a, const void *b) { return (*(int*)b - *(int*)a); // 交换a和b的位置 }
对结构体等复杂数据,需按成员变量比较,如按结构体的
score
字段排序:c复制
typedef struct { int id; float score; } Student; int compare_student(const void *a, const void *b) { return (((Student*)b)->score > ((Student*)a)->score) ? 1 : -1; }
-
注意事项
- 原数组修改:
qsort
直接修改原数组,排序前需备份数据(如需保留原数组)。 - 元素大小:参数
sizeof(int)
必须准确,否则导致内存错误。 - 稳定性:
qsort
不保证排序稳定性(相同值元素顺序可能变化)。
- 原数组修改:
总结:掌握qsort
的关键在于理解比较函数的编写逻辑,灵活应对不同数据类型和排序需求。建议通过实际代码调试加深理解,如对字符串数组或二维数组的排序练习。