用了这么久的sort排序,但是一直没有对他进行总结。
像我这样的蒟蒻有了sort排序就再也没有看过快排、冒泡排序、桶排序了......
sort的头文件<algorithm>
存在于C++标准库内的函数,我们其实并不需要知道他的原理,只要会用就行了;;;
sort函数有三个参数
sort(a,b,c)
- a表示要排序的数组的起始位置
- b表示要排序的数组的结束地址(最后一位要排序的地址)
- c是排序的方法,如果不写则默认从小到大排序
Sort函数使用模板: Sort(start,end,排序方法)
使用sort函数主要的方法就是在参数c上做文章
如想实现从大到小排序
可以自己写一个比较函数
bool complare(int a,int b)
{
return a>b;
}
具体操作就是:
先搞好参数c,即做一个比较函数 cmp ↑
然后sort(a,b,cmp)即可
这样做还是有点麻烦,因为还需要自己编写告诉程序进行何种排序的函数,c++标准库强大的功能完全可以解决这种麻烦。
Sortt函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则:
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序
sort(a,b,c<int>());
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,less<int>());//从小到大排序
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,greater<int>());//从大到小排序
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
另外,sort函数也可以实现对字符的排序
sort(a,b,c<char>());
如对"asdfghjklk"进行排序
从大到小排序
#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;
}
从小到大排序
#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,less<char>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}