我们知道 c 语言有一个快排函数 qsort
#include <stdlib.h>
void qsort(void *__base, size_t __nel, size_t __width, int (*__compar)(const void *, const void *))
系统里面具体解释如下
在使用的时候有几个问题
- 自己定义的比较函数必须跟给定的形式一样,然后在实现的时候在函数题内进行强制转换
int self_cmp(const void * a, const void * b)
{
int * _a = (int *) a;
int * _b = (int *) b;
return _a - _b; // 从小到大排
}
// 从大到小就 return _b - _a;
- 返回值必须是 int 类型的数据
int self_cmp(const void * a, const void * b)
{
double * _a = (double *) a;
double * _b = (double *) b;
if (abs(_a - _b) < 1e-7)
return 0;
else if (_a - _b > 0)
return 1;
else
return -1;
}
- 可以多级比较
typedef struct
{
int number;
int score;
} stu;
int self_cmp(const void * a, const void * b)
{
stu * _a = (stu *) a;
stu * _b = (stu *) b;
if (_a->score != _b->score)
{
return _b->score - _a->score; // 从大到小排序
}
else
return _a->number - _b->number;
} // 这样就是先按照成绩降序排列,成绩相等时按照编号升序排列
来源:CSDN
作者:Lapland Stark
链接:https://blog.csdn.net/weixin_45494811/article/details/104471520