首先是当然是头文件的区别了:
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的优化。