个人博客地址:http://bci9.cn/w/?w=1002
sort函数排序用法
用来给数组排序,速度快,较稳定,支持结构体数组排序。
头文件:
#include<algorithm>
sort(A,B,C)
A:数组(不用加[],如果不从第0位开始排序,第几位就+几,不能省略)
B:数组+n(不用加[](多为数组加要排序的数组下标,省略最后一个),排序到第几位就+几,不能省略)
C:排序方式(可省略,结构体数组排序时必须,默认是从小到大,需要一个bool函数返回值)
排序方式:
bool cmp(int a,int b){
return a>b;(从大到小排,a<b从小到大排)
}
例子:
//从小到大
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int k[5]={2,4,1,3,5};
sort(k,k+5);
for(int i=0;i<5;i++){
cout << k[i] << " ";
}
}
//结果:1 2 3 4 5
//从大到下
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b);
bool cmp(int a,int b){
return a>b;
}
int main(){
int k[5]={2,4,1,3,5};
sort(k,k+5,cmp);
for(int i=0;i<5;i++){
cout << k[i] << " ";
}
}
//结果:5 4 3 2 1
结构体数组排序:
当一个结构体中变量改变位置,其他的变量也会一起移动。
结构体排序的bool函数:
bool cmp(结构体定义名称 n,结构体定义名称 m){
return n.要排序的结构体变量>m.要排序的结构体变量;(从大到小排,"<"从小到大排)
}
sort的A和B都不用加后缀
例子:
//从小到大
#include<iostream>
#include<algorithm>
using namespace std;
struct jgt{
int id,age;
};
bool cmp(jgt a,jgt b);
bool cmp(jgt a,jgt b){
return a.age<b.age;
}
int main(){
int n;
cin >> n;
jgt k[n];
for(int i=0;i<n;i++){
cin >> k[i].age;
k[i].id=i+1;
}
sort(k,k+n,cmp);
for(int i=0;i<n;i++){
cout << k[i].id << " " << k[i].age << endl;
}
}
/*
输入: 6 15 46 37 41 25 37
输出:
1 15
5 25
3 37
6 37
4 41
2 46
*/