C语言 qsort() 快速排序函数用法详解

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);
}

参考:
qsort() — Sort array

How does the compare function in qsort work?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值