sort(begin,end,compare)
STl中自带了sort排序函数,sort可以方便的给指定空间的元素进行排序。当然使用此函数要加文件名#include < algorith> 即可;
参数1:begin 代表数组的首地址,写上数组名即可(当然有时候也会传入结构体内部成员的地址)
参数2:end 首地址加上数组的长度n(也就是你要排序的元素的个数 代表尾地址的下一地址)
参数3:compare 默认不填尾升序排序,也可以自己编写排序规则
compare简单函数编写:
bool compare (int a,int b)
{
return a<b; //升序排列,return a>b; 为降序排列;
}
其实sort用处在很多方面都体现的到,奈何自己只是浅陋,目前只知道做题的时候运用一下,以后会补充
时隔三个月,我又来更新了;
时间复杂度:
sort排序比起手写的循环排序要方便的多,时间复杂度为 n*log2(n)
1
第一个用法就是上面所介绍的,直接对一个数组就行sort排序,并且可以自定义排列顺序,不再过多详述;
2
除了能对数组sort以外,还能对结构体就行排序;举个栗子;
一个学生的信息由 学号 和 姓名首字母组成;现在有50个学生的信息,然后将学生信息按姓名从小到大排列,如果姓名首字母一样,那么按学号从小到大排列;代码实现如下;
struct node
{
int id;//存放学号
char name;//存放姓名首字母
}bb[10000];
bool cmp(node a,node b)
{
if(a.name==b.name)//如果姓名首字母一样,那么按学号从小到大排列;
return a.id<b.id;
else return a.name<b.name;//将姓名从小到大排列
}
for(int i=0;i<50;i++)
{
scanf("%d %c",bb[i].id,bb[i].name);
}
sort(bb,bb+50,cmp);//使用sort的形式和数组一样
关于sort排序有几道简单典型的题,一一列举出来;
开门人和关门人 HDU - 1234
稳定排序 HDU - 1872
EXCEL排序 HDU - 1862
统计同成绩学生人数 HDU - 1235
今年暑假不AC HDU - 2037
题解: