qsort() 使用总结:
qsort() 排序规则:
1. qsort() 默认是按照升序排序的
2. 根据 compare(element1, element2) 返回值,判断两个元素 element1 和 element2 的大小
- 返回值 -1(或任意负整数):element1 小于 element2,
element1 排在 element2 前面;
- 返回值 0:element1 等于 element2,
两个元素相等,则它们在排序数组中的顺序是未指定的;
- 返回值 1(或任意正整数):element1 大于 element2,
element1 排在 element2 后面;
3. 如果需要对元素降序排序,只需要 compare() 返回升序的相反数
qsort() 头文件:
#include <stdlib.h>
void qsort(void *base, size_t num, size_t width,
int(*compare)(const void *element1, const void *element2));
base:指向排序数组的第一个元素
num:数组中元素的个数
width:数组中每个元素的大小,sizeof(base[0])
compare:
- 比较函数,需要自定义
- 比较两个数组元素的大小
- 返回的整数值标记了两个元素的大小关系
- 返回值 -1(或任意负整数):element1 小于 element2
- 返回值 0:element1 等于 element2
- 返回值 1(或任意正整数):element1 大于 element2
注意事项
当数组中元素是整数判断大小时,虽可以简化为减法,但大小容易溢出:
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b ); // 两数相减容易溢出
}
更好的选择可以是:
int cmpfunc(const void *a, const void *b)
{
const int *A = a, *B = b;
return (*A > *B) - (*A < *B);
}