蓝桥杯基础入门——排序
蓝桥杯刚入门的小伙伴们碰到排序题目是不是还在纠结用冒泡排序还是选择排序还是归并排序呢?想来不管哪种排序自己写起来都是繁杂的。今天训练的题目就是排序,接下来给大家介绍一下蓝桥杯常用的排序函数——sort函数的使用
1. 基数排序法
有时候呢,排序题不一定要直接进行sort排序,对输入的数值利用数组下标进行基数排序也是一个很方便的方法。比如我们要记录成绩,对成绩进行排名。设置一个数字比如grade[101],那么数组的下标刚好是0~100,代表着分数的取值。当读取一个成绩num时,令grade[num]++;这样就可以方便的记录下每个成绩的人数啦,根据下标的大小关系已然是排序好的关系。不过使用前记得数组初始化哟。这里可以使用memset函数:memset(grade,0,sizeof(grade))即可对grade数组初值全部赋值为0。这里memset函数的时间复杂度为O(n)。
2. sort函数的基本用法
头文件:algorithm
语法描述:sort(*begin,*end,cmp)
说明:*begin为要排序数组的起始地址;end为要排序数组的结束地址(最后一位要排序地址的下一位);cmp,为排序函数,此参数可以省略,省略时表示默认排序(根据排序数据类型为非降序或字典序等)。sort函数排序以快速排序为主,时间复杂度为O(nlogn)。sort函数的时间复杂度不会退化为n^2。
使用例子:
3. sort函数自定义使用方法
sort函数进行自定义排序方法就是不使用默认排序而使用其他排序,比如进行非升序排序、按距离某点的远近排序、按绝对值排序等自己想要的排序方式进行排序。
步骤:对数组a的前n个元素按指定规则排序
Step1:定义表明排序规则的函数cmp,函数返回值为bool类型
Step2:使用sort函数进行排序sort(a,a+n,cmp)
使用例子:对数组进行升序排序
4. sort函数结构体排序
sort函数对结构体进行排序其实就是sort函数进行自定义排序方法中的一种特殊用法,只需在cmp中指定结构体排序规则即可。
步骤:对结构体数组a的前n个元素按指定规则进行排序
Step1:定义结构体
struct node{
//定义结构体成员,如:int a,b;
};//注意定义时括号后面的小分号哟
Step2:定义规定排序规则的函数
bool cmp(node a,node b){ }//函数返回值类型为bool类型
Step3:调用sort函数对结构体aa进行排序
sort(aa,aa+n,cmp);
使用例子:
5. sort函数对字符串进行排序
使用sort函数还可以很方便的对一个字符串间的字符进行排序,用法和前面的一样哟,下面直接上例题效果:
使用例子:字符串递增 sort(str.begin(),str.end());
使用例子:字符串递减 sort(str.rbegin(),str.rend());