讲解一下C++中 algorithm头文件下sort()函数的使用。
sort()知识:
1.sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!
2.sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
3.sort函数使用模板:
sort(start,end,排序方法)
注意:sort函数中若没有第三个参数,默认实现的是从小到大排序
(1)自己编写告诉程序执行何种排序的原则的函数
代码1:
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100010;
int a[N];
bool cmp1(int a,int b) //降序排序
{
return a>b;
}
bool cmp2(int a,int b) //升序排序
{
return a<b;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
a[i]=i+1;
}
while(m--)
{
int p,q;
cin>>p>>q;
if(p==0)
sort(a,a+q,cmp1);
if(p==1)
sort(a+q-1,a+n,cmp2); //需注意这里要填写的首地址要-1
/*for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;*/
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
(2)c++标准库强大的功能完全可以解决这种麻烦
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序
代码2:
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100010;
int a[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
a[i]=i+1;
}
while(m--)
{
int p,q;
cin>>p>>q;
if(p==0)
sort(a,a+q,greater<int>()); //greater 为从大到小排序
if(p==1)
sort(a+q-1,a+n,less<int>()); //less 为从小到大排序
/*for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}*/
cout<<endl;
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
拓展:
利用sort函数还可以实现对字符的排序,排序方法大同小异
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
char a[11]="asdfghjklk";
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,greater<char>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
总结:
利用sort()函数排序时除了需注意排序方法的书写外,还需要注意sort要排序数组起始位置和终止位置。