首先这里特别注明sort和qsort最大的区别是自己写比较函数时
sort,return a<b;是升序
而qsort,
return *(int *) a - *(int *) b;
某种意义上是return a>b;才是升序
1.sort
头文件#include<algorithm>
1.1
sort(a,a+20); //a+20表明有20个数参与比较
1.2默认升序排列,如果降序要自己写比较函数
bool cmp(int a,int b)
{
return a>b; //降序排列,如果改为return a<b,则为升序}
sort(a, a+20, cmp);
2.qsort
2.1
qsort(num,100,sizeof(num[0]),cmp);
2.2 自己编写cmp
2.2.1 int型
int cmp ( const void *a , const void *b )// const void *特别注意这里不同
{
return *(int *)a - *(int *)b;
}
2.2.2 char型; string; double
return *(char *)a - *(char *)b;
return strcmp((char *)a, (char *)b);
return *(double *)a > *(double *)b ? 1 : -1;//特别注意
2.2.3 结构体
struct In
{
int x;
int y;
}s[100];
//按照x从小到大排序
return (*(In *)a).x - (*(In *)b).x;
//按照x从小到大排序,当x相等时按照y从大到小排序
struct In *c = (In *)a;kk
struct In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
总结:qsort
return a>b; //降序排列,如果改为return a<b,则为升序