最近这几天,康康一直在刷一些题目,来保证手感,恰好做到了排序一类的题目,发现sort挺好用的,直接秒杀一些什么冒泡、桶排序、快排等等,顺便就整理一下吧。
首先呢,讲一下sort最最最基本的格式——
- sort位于#include<algorithm>的头文件中(注意STL都没有.h)
- sort格式——sort(a+m,a+n) //我来解释一下,a是一个数组的前缀,例如a[5],这里的a就是传入首地址往后推移m个单位,一直到第n个单位
ps:如果m不写,那么就是默认从下标0开始
可能友友们还是不理解,那就准备看下面的小例题。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[5]={1,5,6,7,9};
sort(a,a+5);
for(int i=0;i<5;i++)
cout<<a[i]<<" ";
return 0;
}
输出结果:
可以发现,这个sort默认就是从小到大的排序方式,可能就会有小伙伴说,假如我想从大到小的顺序排列,怎么去作呢。
这里康康,给大家两点思路,
- 可以先直接用这种sort格式,然后逆序输出,完事。
- 可以使用进阶版sort
sort进阶款
同样,先看格式————sort(a+m,a+n,greater<T>()) //greater就是更大的意思,T就是数据的类型,比如我如果是整数,那么T就填int,如果是字符,那就填char
看例题,这就是上面那个例题中的sort稍微变形一下来的
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[5]={1,5,6,7,9};
sort(a,a+5,greater<int>());
for(int i=0;i<5;i++)
cout<<a[i]<<" ";
return 0;
}
这是结果,是吧,简洁明了。
看到这里,可能有些小伙伴绝得还是不够尽兴,康康懂你们,继续往下看
sort究极版
老规矩,献上格式————sort(a+m,a+n,RULE()) //RULE就是你自己定义的规则
RULE的规则定义也有格式具体看下
struct RULE
{
bool operator()(const T &a1,const T &a2) const //T和上面的一样,如果是整数就改为int
{
return _________; //填你需要的排序方式
}
};
如果你还是不理解的,话就看下面的例题吧!
#include<iostream>
#include<algorithm>
using namespace std;
struct RULE
{
bool operator()(const int &a1,const int &a2) const
{
return a1%10<a2%10; //这里我想要按照个位数,从小到大排序
}
};
int main()
{
int a[5]={19,56,64,72,90};
sort(a,a+5,RULE());
for(int i=0;i<5;i++)
cout<<a[i]<<" ";
return 0;
}
来见证奇迹的时刻到了
是不是很为震撼,以前一直用循环和if来判断排序,还学着各种花式排序,帅炸了不是。
希望康康今天分享的东西能对你有帮助,但也希望各位多多支持我。