关于 qsort 的一个坑

↘锁芯ラ 提交于 2020-02-24 10:48:13


我们知道 c 语言有一个快排函数 qsort

#include <stdlib.h>

void qsort(void *__base, size_t __nel, size_t __width, int (*__compar)(const void *, const void *))

系统里面具体解释如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在使用的时候有几个问题

  1. 自己定义的比较函数必须跟给定的形式一样,然后在实现的时候在函数题内进行强制转换
int self_cmp(const void * a, const void * b)
{
	int * _a = (int *) a;
	int * _b = (int *) b;
	return _a - _b; // 从小到大排
}
// 从大到小就 return _b - _a;
  1. 返回值必须是 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;
}
  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;
} // 这样就是先按照成绩降序排列,成绩相等时按照编号升序排列
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!