首先是当然是头文件的区别了:
qsort:
#include<stdlib.h>
sort:
#include<algorithm>
using namespace std;
qsort是c里的,sort是c++里的,头文件自然不一样。
之后是调用的格式,对于qsort,它需要4个参数:
qsort(排序首地址,排序长度,排序元素长度,cmp)
而sort只需要2个或3个参数:
sort(排序首地址,排序尾地址,cmp)(2个参数就是不写cmp,这样默认是升序排列)
最后重点就是关于cmp的写法:
qsort:(以整型为例, 字符串要用strcmp,都是升序)
- int cmp(const void *a, const void *b)
- {
- return *(int *)a - *(int *) b;// 因为返回值类型为int 所以仅限于整型
- }
结构体一级排序:
- int cmp(const void *a, const void *b)
- {
- Date *c = (Date *)a;
- Date *d = (Date *)b;
- return c -> mon - d -> mon;
- }
- int cmp(const void *a, const void *b)
- {
- Date *c = (Date *)a;
- Date *d = (Date *)b;
- if(c -> mon != d -> mon)
- return c -> mon - d -> mon;
- return c -> day - d -> day;
- }
sort:(以整型为例, 字符串要用strcmp,都是升序(默认为升序))
- bool cmp(const int &a, const int &b)//cmp(const 变量类型 &a, const 变量类型 &b)
- {
- return a < b;
- }
结构体一级排序:
- bool cmp(const Date &a, const Date &b)
- {
- return a.mon < b.mon;
- }
结构体二级排序:
- bool cmp(const Date &a, const Date &b)
- {
- if(a.mon != b.mon)
- return a.mon < b.mon;
- return a.day < b.day;
- }
对于结构体也可以利用重载运算符。
- struct Road
- {
- int a, b, l;
- bool operator < (const Road &i)const
- {
- return l < i.l;
- }
- }road[S];
C++中的sort是C中qsort的优化。
本文对比了C语言中的qsort函数与C++中的sort函数。详细介绍了两者的使用方法及参数区别,特别是比较函数cmp的实现方式,并给出了针对不同数据类型的示例。
1251

被折叠的 条评论
为什么被折叠?



