algorithm头文件下的常用函数(sort)

sort是用来排序的函数,它根据具体情形使用不同的排序方法。
1.如何使用sort排序
sort函数的使用必须加上头文件#include<algorithm>,
使用方法如下:
sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));
可以看到,sort的参数有三个,其中前两个是必填的,而比较函数则可以根据需要填写,
如果不写比较函数,则默认对前面给出的区间进行递增排序。
int a[6]={9,4,2,5,6,-1}
sort(a,a+6);//将a[0]~a[5]从小到大排序
for(int i=0;i<6;i++)
cout<<a[i]<<" ";
输出结果:-1 2 4 5 6 9
对char型数组排序(默认为字典序):
char c[]={'T','W','A','K'};
sort(c,c+4);
for(int i=0;i<4;i++)
cout<<c[i];
输出结果:AKTW
sort的第三个可选参数就是compare函数(一般写作cmp函数)。
如果想要从大到小来排序,则要使用比较函数cmp来“告诉”sort何时要交换元素,可以这样写:
bool cmp(int a,int b)
return a>b;//可以理解为当a>b时把a放在b前面
int a[]={3,1,4,2};
sort(a,a+4,cmp);
for(int i=0;i<4;i++)
cout<<a[i]<<" ";
输出结果:4 3 2 1
对char型数组从大到小排序:
bool cmp(char a,char b)
return a>b;
int main()
{char c[]={'T','W','A','K'};
sort(c,c+4,cmp);
for(int i=0;i<4;i++)
cout<<c[i];
}
输出结果:WTKA
记忆方法:如果要把数据从小到大排序,那么就用"<",因为”a<b“就是左小右大;如果要把数据从大到小排序,
那么就用”>“。
(2)结构体数组的排序
现定义了如下的结构体:
struct node{int x,y;
}ssd[10];
如果想让ssd数组按照从小到大排序(即进行一级排序),那么可以这样写cmp函数:
bool cmp(node a,node b)
return a.x>b.x;//按x值从大到小对结构体数组排序
ssd[0].x=2;
ssd[0].y=2;
ssd[1].x=1;
ssd[1].y=3;
ssd[2].x=3;
ssd[2].y=1;
sort(ssd,ssd+3,cmp);//排序
for(int i=0;i<3;i++)
cout<<ssd[i].x<<" "<<ssd[i].y<<endl;
输出结果:3 1
                 2 2
                 1 3
而如果想先按x从大到小排序,但当x相等的情况下,按照y的大小从小到大来排序(即进行二级排序),那么cmp的写法是:
bool cmp(node a,node b)
if(a.x!=b.x) return a.x>b.x;
else return a.y<b.y;
这里的cmp函数首先判断结构体内的x元素是否相等,如果不相等,则直接按照x的大小来排序;否则,比较两个结构体中y
的大小,并按y从小到大排序。
(3)容器的排序
在STL标准容器中,只有vector、string、deque是可以使用sort的。这是因为像set、map这种容器是用红黑树实现的,元素
本身有序,故不允许使用sort排序。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是蒸的c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值