快排函数qsort(C语言)
发布日期:2021-11-15 21:44:09
浏览次数:2
分类:技术文章
本文共 1825 字,大约阅读时间需要 6 分钟。
头文件
函数原型:
void qsort( void *base, //需要排序的数组的首地址(即数组名) size_t nmemb, //数组中元素的个数 size_t size, //数组中每个元素的大小 int (*cmp) (const void *, const void *) //指向比较函数的函数指针,决定了排序的顺序 );
注意:
如果两个元素的值是相同的,那么它们的前后顺序是不确定的。也就是说qsort()是一个不稳定的排序算法。
cmp参数:
int cmp(const void *p1, const void *p2);
注意:
1、两个形参必须是const void *型 2、在cmp函数内部会将const void *型转换成实际类型原则:
如果cmp返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的前面 如果cmp返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定 如果cmp返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的后面情景一:
int类型
(1)从小到大排列
int cmp(const void *c,const void *d){ return *(int *)c-*(int *)d;}
(2)从大到小排列
int cmp(const void *c,const void *d){ return *(int *)d-*(int *)c;}
情景二:
double类型
(1)从小到大
int inc (const void * a, const void * b){ return *(double *)a > *(double *)b ? 1 : -1;}
(2)从大到小
int inc (const void * a, const void * b){ return *(double *)a > *(double *)b ? -1 : 1;}
情景三:
字符排序
int inc(const void *a,const void *b){ return *(char *)a - *(char *)b; //从小到大}
情景四:
字符串排序
char a[m][n] = { { "...."}, { "....."}, .....};qsort(a, m, sizeof(a[0]), inc);
(1)根据字符串首字母排序
int inc(const void *a, const void *b) { return * (char *)a - *(char * )b; }
(2)根据字符串长度排序
int inc(const void *a, const void *b) { return strlen((char * )a) > strlen((char * )b) ? 1 : -1; }
(3)按字典排序字符串
int inc(const void *a, const void *b){ return (strcmp((char *)a, (char *)b));}
情景五:
结构体类型
struct node{ double one; int two;} s[100];
(1).一级排序
根据double型的one的大小排序结构体int inc( const void *a ,const void *b){ return ( * (node * )a).one > ( * (node * )b).one ? 1 : -1;}
(2)二级排序
先根据double型的one的大小排序,若两值相等,在根据int型two的大小排序int inc( const void *a , const void *b ){ if((* (node * )a).one != ( * (node * )b).one)return ( * (node * )a).one > ( * (node * )b).one ? 1 : -1;else return (* (node * )a).two -( * (node * )b).two;}
转载地址:https://blog.csdn.net/qq_43419016/article/details/89161591 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月05日 03时48分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
不废话~就是抽奖~
2021-06-30
屏上有一层紫色(正在找原因)
2021-06-30
Android studio JNI jni实例
2021-06-30
图像正确(相当于这个小项目就要结尾了)
2021-06-30
LCD-DBI接口与DPI接口与DSI接口
2021-06-30
不笑找我系列 | 程序员爆笑漫画十条
2021-06-30
c语言 库打印函数
2021-06-30
码农笑话图片十张
2021-06-30
linux我回来了
2021-06-30
嵌入式未来趋势是什么?
2021-06-30
书中自有黄金屋~外加中奖结果通知
2021-06-30
图文|Android 使用Thread 和多线程使用互斥锁
2021-06-30
三星的S3C2440A 存储器控制器
2021-06-30
建立交叉编译环境
2021-06-30
linux Hello World 模块编程
2021-06-30
中断下半部机制-softirq-Tasklet-工作队列
2021-06-30
linux下的字符设备驱动
2021-06-30
VMware 下Linux无法上网 新增支持WIFI方式 无线连接
2021-06-30
有意思的BAT CMD if while循环 整型自增
2021-06-30
Android 7.1 bootchart触发后导致不断重启
2021-06-30