C++排序函数sort()和qsort()的参数比较函数的统一记忆方法

前言:每次写排序函数sort或qsort都怕搞错参数的比较函数的规则,都需要来查一查确认下. 查得多了自然就总结到了个方法,下面,分享出来看能否有助于大家。

sort则需要<algorithm>

qsort需要引入头文件<stdlib.h>

sort(数组名,数组末地址,compare) //若不写compare则默认升序排列

sort(begin,end,compare)

关于参数compare,compare带两个同类型的参数,如果第一个参数排在第二个参数前面,返回true,否则返回false

qsort(数组名 ,元素个数,元素占用的空间(sizeof),比较函数)

void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *));

qsort 函数的用法规定,"比较函数"的原型应是:int 函数名(const void * elem1, const void * elem2);

该函数的两个参数,elem1 和elem2,指向待比较的两个元素。也就是说, * elem1 和* elem2 就是待比较的两个元素。该函数必须具有以下行为:

1) 如果 * elem1 应该排在 * elem2 前面,则函数返回值是负整数(任何负整数都行)。

2) 如果 * elem1 和* elem2 哪个排在前面都行,那么函数返回0

(值为0时,qsort会让当前所比较的这两个元素暂时保持不动。)

3) 如果 * elem1 应该排在 * elem2 后面,则函数返回值是正整数(任何正整数都行)。

一定注意qsort与sort函数中自定义的比较函数compare中哪个元素应该排在前面的要求是不同的。

sort和qsort的比较函数的统一记忆方法为: [sort]:a1<a2 ------ [qsort]:a1-a2<0 (或a1-a2=0) 等式成立为真(sort)或为负/零(qsort)时,不交换.其它交换.

个人感觉这样就统一好记多了,不用再查了,也不容易错了。

相关推荐
InfinteJustice5 小时前
踩坑分享C 语言文件操作全攻略:从基础读写到随机访问与缓冲区原理
c语言·开发语言·microsoft
码云数智-大飞5 小时前
滥用Lombok的@EqualsAndHashCode导致线上事故复盘
开发语言
yong99905 小时前
C# 实时查看硬件使用率(CPU 内存 硬盘 网络)
开发语言·网络·c#
不午休の野猫5 小时前
vs + qt环境编译.sln项目时报无法解析的外部符号metaObject && qt_metacast
开发语言·qt
吴声子夜歌6 小时前
Java——接口的细节
java·开发语言·算法
阿拉金alakin6 小时前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on6 小时前
Java—方 法
java·开发语言·算法·青少年编程
雨落在了我的手上6 小时前
如何学习java?
java·开发语言·学习
神仙别闹7 小时前
基于 C# OpenPGP 的文件管理系统
开发语言·c#
汉克老师7 小时前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级