文章目录
函数
头文件
必须的头文件#include < algorithm>和using namespace std
参数含义
Sort函数有三个参数:(第三个参数可不写)
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
返回值
none
应用
1. 整型数组排序
①正序
int a[11]={0,1,2,3,4,5,6,7,8,9,10};
sort(a,a+11);
sort(a,a+11),表明要a[0]一直到a[10]的所有元素参与排序
当然,我们还可以截取部分元素参与排序。
int a[11]={0,1,2,3,4,5,6,7,8,9,10};
sort(a+4,a+11);
这样前面四个元素a[0] a[1] a[2] a[3]就不参与排序了.
注意:为什么从a[0]-a[10]排序,写的是sort(a,a+11)而不是sort(a,a+10)?为什么从a[4]-a[8]排序写的是sort(a+4,a+9)而不是sort(a+4,a+8)?
因为sort函数实际上传参传的是容器的开始迭代器与尾后迭代器。所以sort(a+5,a+9),是给a[5]到a[8]的元素排序,sort(a+m,a+n)是给从a[m]到a[n-1]的元素排序
②倒序
只需要自己写一个cmp函数,返回值是bool
bool cmp(int a,int b)
{
return a>b;
}
然后给sort函数传入第三个参数就行啦
int a[11]={0,1,2,3,4,5,6,7,8,9,10};
sort(a,a+11,cmp);
2. string排序
同样的,我们需要的只是要写一个cmp函数
cmp函数中,如果要升序就 return 前一个元素 < 后一个元素,如果要降序就 return 前一个元素 > 后一个元素,同样适用于数组的排序
bool cmp(string a,string b)
{
return a>b;
}
然后代入sort的第三个参数
string a[4]={"abcd","heheheh","xixixi","kkkkkk"};
sort(a,a+4,cmp);
3. 结构体数组及二级排序
定义一个结构体,本例中以狗狗结构体为例,要求实例化10只dog,并且按照先排公狗,后排母狗的规则排序。排序时先让年龄从大到小排序,如果年龄一样,再考按照体重从轻到重排。
struct Dog{
int age;
int weight;
string sex;
};
写一个cmp函数
bool cmp(struct Dog a,struct Dog b)
{
if(a.sex==b.sex){
if(a.age==b.age){
return a.weight<b.weight;//体重升序
}
else return a.age>b.age;//年龄降序
}
else return a.sex>b.sex;//性别字典序降序
}
然后传入函数参数
struct Dog dog[10];
sort(dog,dog+10,cmp);