欢迎关注笔者,你的支持是持续更博的最大动力
在标准模版库(Standard Template Library)中,包含一些常用的算法和数据结构可供调用。
使用前提:#include <algorithm>
sort排序
sort就是STL中已经包含的排序算法,是用快速排序实现的,时间复杂度 O(nlogn)。
语法:sort (数组名+n1,数组名+n2,排序规则名( ) );
sort函数可以:
- 对基础数据类型的数组进行默认排序;
- 对基础数据类型的数组进行自定义排序;
- 对任意数据类型的数组进行自定义排序。
下面将举例说明这三大用法:
用法一
对基本类型的数组进行默认排序(从小到大),默认排序则不用写第三个参数 (排序规则名):
sort (数组名+n1,数组名+n2);
意思是,将数组中下标范围为 [n1, n2) 的元素从小到大排序。
举例
对整个数组排序,[0, 7):
int a[ ] = {15, 4, 3, 9, 7, 2, 6};
sort(a, a+7);
结果:{2,3,4,6,7,9,15}
对前三个元素排序,[0, 3):
int a[ ] = {15, 4, 3, 9, 7, 2, 6};
sort(a, a+7);
结果:{3, 4, 15, 9, 7, 2, 6}
对第3个到第5个元素排序,[2, 5):
int a[ ] = {15, 4, 3, 9, 7, 2, 6};
sort(a+2, a+5);
结果:{15, 4, 3, 7, 9, 2, 6}
用法二
对基本类型数组从大到小排序,规则名greater,需要写明被排序的元素类型T:
sort (数组名+n1,数组名+n2,greater<T>() );
举例
对第2个元素到第4个元素排序,[1, 4):
int a[ ] = {15, 4, 3, 9, 7, 2, 6};
sort(a+1, a+4, greater<int>() );
结果:{15, 9, 4, 3, 7, 2, 6}
用法三
用自定义的排序规则,对任何类型T的数组排序:
sort (数组名+n1,数组名+n2,排序规则结构名() );
排序规则结构的定义方式:
struct 结构名 {
bool operator() (const T & a1, const T & a2) const {
//若a1应该在a2前面,返回true
//否则,返回false,相等也是false
}
};
下面将举例:
- 给 int 数据类型的数组按2个规则排序
- 给自定义的 Student 数据类型按学生姓名、学号、绩点分别排序
举例1:int 数据类型
//创建按从大到小排序规则
struct Rule1 {
bool operator()(const int & a1, const int & a2) const{
return a1 > a2;
}
};
//创建按个位数从小到大排序规则
struct Rule2 {
bool operator()