我们知道,c和c++下各有一个排序函数,分别为qsort和sort。显然,c++的sort函数更方便,也更优雅,所以我们在实战时经常使用sort()函数。
下面介绍sort()函数的参数类型:
sort(首元素地址,末元素地址的下一个地址,比较函数)
其中,前两个参数为必填项,最后一个参数是选填项,如果不填最后一项,sort函数默认进行递增排序。
下面来一个例子:
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[5]={5,3,1,4,2};
sort(a,a+5);//注意第二个参数
for(int i=0;i<5;i++)
cout<<a[i]<<' ';
return 0;
}
输出为:1 2 3 4 5
上例是以int型为例,double,char型用法与其相同。(char型默认按字典序排序)
下面来讨论cmp函数的使用场景和用法。
在我们想自定义排序顺序(从大到小或者从小到大)或者给结构体里的元素排序时,我们不可避免地会用到cmp函数,下面给出编写sort()函数的代码:(以int型元素为例,double和char同理)
降序排序的cmp函数:
bool cmp(int a,int b)
{
return a>b;//这里可理解为如果a大于b,就把a放在b前面
}
升序排序的cmp函数:
bool cmp(int a,int b)
{
return a<b;
}
下面来看示例:
#include <bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main(){
int a[5]={5,3,1,4,2};
sort(a,a+5,cmp);
for(int i=0;i<5;i++)
cout<<a[i]<<' ';
return 0;
}
输出为:5 4 3 2 1
最后,cmp函数可以指定结构体里的特定元素进行排序;sort函数也可以应用在vector、deque、string容器中,这里不过多讨论。