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

sort是用来排序的函数,它根据具体情形使用不同的排序方法。
1.如何使用sort排序
sort函数的使用必须加上头文件#include,
使用方法如下:
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< 输出结果:-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< 输出结果: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< 输出结果: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< }
输出结果:WTKA
记忆方法:如果要把数据从小到大排序,那么就用"<",因为”a 那么就用”>“。
(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< 输出结果: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 这里的cmp函数首先判断结构体内的x元素是否相等,如果不相等,则直接按照x的大小来排序;否则,比较两个结构体中y
的大小,并按y从小到大排序。
(3)容器的排序
在STL标准容器中,只有vector、string、deque是可以使用sort的。这是因为像set、map这种容器是用红黑树实现的,元素
本身有序,故不允许使用sort排序。

 

 

你可能感兴趣的:(c++)