前言:每次写排序函数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)时,不交换.其它交换.
个人感觉这样就统一好记多了,不用再查了,也不容易错了。