sort函数是用于排序的函数,要使用的时候要加上头文件"#include <algorithm>"。
在一些题目中需要排序,但是排序并不是题目的重点,这时使用sort()函数可以大大提高我们编写代码的效率。
1.基础排序代码:
#include <iostream>
#include <algorithm> //记得添加这个头文件
using namespace std;
int main(){
int a[8] = {1, 4, 6, 2, 5, 9, 7, 3};
int len = sizeof(a) / sizeof(int); //获取数组长度
cout << "原数组:";
for(int i = 0; i < len; i++){
cout << a[i] << " ";
}
cout << endl;
sort(a, a + 4); //对前4个元素排序,默认为递增排序
//sort(a, a + 4, less<int>()); //设置为递增排序,这个写法和上一行是一样的
cout << "只对数组前4个元素:";
for(int i = 0; i < len; i++){
cout << a[i] << " ";
}
cout << endl;
sort(a, a + len); //默认为递增排序
cout << "递增排序:";
for(int i = 0; i < len; i++){
cout << a[i] << " ";
}
cout << endl;
cout << "递减排序:";
sort(a, a + len, greater<int>()); //设置为递减排序
for(int i = 0; i<len; i++){
cout << a[i] << " ";
}
return 0;
}
//运行结果:
原数组:1 4 6 2 5 9 7 3
只对数组前4个元素:1 2 4 6 5 9 7 3
递增排序:1 2 3 4 5 6 7 9
递减排序:9 7 6 5 4 3 2 1
2.sort()函数不仅可以对整型数据进行排列,浮点型和字符型也是可以的。
int main(){
double a[8] = {1.8, 4.5, 6.2, 2.6, 5.8, 9.2, 7, 3.7};
int len = sizeof(a) / sizeof(double); //获取数组长度
...
}
//运行结果:
原数组:1.8 4.5 6.2 2.6 5.8 9.2 7 3.7
只对数组前4个元素:1.8 2.6 4.5 6.2 5.8 9.2 7 3.7
递增排序:1.8 2.6 3.7 4.5 5.8 6.2 7 9.2
递减排序:9.2 7 6.2 5.8 4.5 3.7 2.6 1.8
int main(){
char a[8] = {'D', 'A', 'G', 'B', 'E', 'F', 'H', 'C'};
int len = sizeof(a) / sizeof(char); //获取数组长度
...
}
//运行结果:
原数组:D A G B E F H C
只对数组前4个元素:A B D G E F H C
递增排序:A B C D E F G H
递减排序:H G F E D C B A
3.不仅可以对基本数据类型进行排序,也可以对结构体进行排序,这时候需要自己定义排序规则。
#include <iostream>
#include <algorithm> //记得添加这个头文件
using namespace std;
struct Node{
int x;
int y;
}s[5];
bool cmp(Node a, Node b){ //按x的从大到小排序
return a.x > b.x;
}
int main(){
s[0].x = 5; s[0].y = 6;
s[1].x = 3; s[1].y = 7;
s[2].x = 8; s[2].y = 4;
s[3].x = 6; s[3].y = 8;
s[4].x = 4; s[4].y = 5;
int len = sizeof(s) / sizeof(Node);
cout << "原结构体:" << endl;
for(int i = 0; i < 5; i++){
cout << "x:" << s[i].x << " y:" << s[i].y << endl;
}
cout << endl;
sort(s, s + 3, cmp); //对前3个元素排序(按x进行递减排序)
cout << "只对结构体前3个元素进行排序(按x进行递减排序):" << endl;
for(int i = 0; i < len; i++){
cout << "x:" << s[i].x << " y:" << s[i].y << endl;
}
cout << endl;
sort(s, s + len, cmp); //对结构体元素排序(按x进行递减排序)
cout << "对结构体元素进行排序(按x进行递减排序):" << endl;
for(int i = 0; i < len; i++){
cout << "x:" << s[i].x << " y:" << s[i].y << endl;
}
return 0;
}
//运行结果:
原结构体:
x:5 y:6
x:3 y:7
x:8 y:4
x:6 y:8
x:4 y:5
只对结构体前3个元素进行排序(按x进行递减排序):
x:8 y:4
x:5 y:6
x:3 y:7
x:6 y:8
x:4 y:5
对结构体元素进行排序(按x进行递减排序):
x:8 y:4
x:6 y:8
x:5 y:6
x:4 y:5
x:3 y:7
4.改变比较规则,改写cmp()函数即可。
bool cmp(Node a, Node b){
if(a.x != b.x)
return a.x > b.x; //先按x递减排序,如果相等
else
return a.y < b.y; //再按y递增排序
}
//运行结果:
对结构体元素进行排序(按x进行递减排序,如果x相等,再按y递增排序):
x:8 y:4
x:5 y:6
x:4 y:5
x:3 y:2
x:3 y:7
5.除此之外,还可以对vector容器进行排序。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int a, int b){ //按x的从大到小排序
return a > b; //先按x递减排序,如果相等
}
int main(){
vector<int> v;
v.push_back(5);
v.push_back(3);
v.push_back(9);
cout << "排序前:";
for(int i = 0; i < v.size(); i++){
cout << v[i] << " ";
}
cout << endl << "排序后:";
sort(v.begin(), v.end(), cmp);
for(int i = 0; i < v.size(); i++){
cout << v[i] << " ";
}
return 0;
}
//运行结果:
排序前:5 3 9
排序后:9 5 3
氷鸢鸢鸢
2020.2.28