1. sort()函数简单介绍
我们可以使用sort()函数对数组或者一些容器进行快速的排序
2. sort()函数使用分析
sort(排序起始位置,排序结束位置,排序方式)
A. 省略排序方法的填写
如果没有填写排序方式系统则会默认会进行一个数据从小到大进行排序
B. 使用系统内置排序方法
对于系统的基本数据类型,可以直接使用内置的排序方法进行使用比较即 less/greater<基本数据类型>()
例如整型变量 Int,可以使用 less< int >() 代表小顶堆(从小到大排序) ,greater()即大顶堆(从大到小排序)
C. 使用自定义排序方法
对于一些自定义的数据类型如果想要进行比较也可以使用自定义的一些比较方法进行相关调用去对自定义的数据类型进行比较排序,使用 bool operator方法去重载运算符即可或者自定义排序方法都可以。
E. 函数头文件 “algorithm”
3. sort()函数运行展示
A. 省略排序方法时运行结果展示(默认自小到大排序)
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[] = {3, 1, 2, 5, 4};
sort(a, a + 5);
for(int i = 0; i < 5; i ++ )
cout << a[i] << ' ';
}
B. 使用系统内置排序方法(基本数据类型)
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[] = {3, 1, 2, 5, 4};
sort(a, a + 5, less<int>() );
cout << "less<int> 自小到大排序结果" << endl;
for(int i = 0; i < 5; i ++ )
cout << a[i] << ' ';
cout << '\n' ;
sort(a, a + 5, greater<int>() );
cout << "greater<int> 自大到小排序结果" << endl;
for(int i = 0; i < 5; i ++ )
cout << a[i] << ' ';
}
C. 使用自定义排序方法(自定义数据类型)
方法一:可以将重载运算符直接写在结构体里面,这样在排序方式的地方就可以直接省略
#include<iostream>
#include<algorithm>
using namespace std;
struct Edge{
int x, y;
// 方法一: 将重载运算符放在结构体里面,这样就可以直接进行比较
bool operator < (const Edge & W){
return x < W.x; // 按 x 从小到大排序
}
}edge[5];
int main(){
edge[0] = {2, 2};
edge[1] = {1, 1};
edge[2] = {3, 0};
edge[3] = {2, 1};
edge[4] = {1, 3};
sort(edge, edge + 5);
cout << "这是方法一: 将重载运算符放入结构体当中然后从小到大排列输出" << endl;
for(int i = 0; i < 5; i ++ ){
cout << edge[i].x << ' ' << edge[i].y << endl;
}
}
方法二:将排序方法在外面,再在写sort()函数加入对应排序方法调用
#include<iostream>
#include<algorithm>
using namespace std;
struct Edge{
int x, y;
}edge[5];
bool com(Edge & A, Edge & B){ //优先排序 x 小的,当 x 的值一样时,优先排序 y 小的。
if(A.x == B.x) return A.y < B.y;
return A.x < B.x;
}
int main(){
edge[0] = {2, 2};
edge[1] = {1, 1};
edge[2] = {3, 0};
edge[3] = {2, 1};
edge[4] = {1, 3};
sort(edge, edge + 5, com);
cout << "将排序方法在外面,再在写sort()函数加入对应排序方法调用" << endl;
for(int i = 0; i < 5; i ++ ){
cout << edge[i].x << ' ' << edge[i].y << endl;
}
}