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)时,不交换.其它交换.

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

相关推荐
开开心心就好1 分钟前
安卓PDF处理工具,免费无广告零弹窗
android·服务器·开发语言·算法·pdf·ocr
Pniubi2 分钟前
HashMap扩容全流程
java·开发语言·数据结构
白杨尚青2 小时前
C++进阶篇(二):多态——虚函数、重写、虚函数表与三个经典坑(附完整代码仓库)
开发语言·c++·多态·虚函数·重写·动态绑定
syagain_zsx2 小时前
spdlog实战:日志分级、滚动与性能调优
linux·c++·日志库·二次开发日志库
WJ.Polar20 小时前
Java封装、继承、多态
java·开发语言
摇滚侠20 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_3077791320 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins20 小时前
c++新增頭文件
c++
Shadow(⊙o⊙)20 小时前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
爱读书的小胖20 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言