对数组排序
//头文件
#include<algorithm>
using namespace std;
int a[5]={1,3,4,2,5};
sort(a,a+5);//输出结果:1 2 3 4 5
//sort默认从小到大排序 (升序)
//从大到小排序(降序)
bool cmp(int a,int b)
return a>b;
sort(a,a+5,cmp);//输出结果:5 4 3 2 1
/*如果将cmp函数大于号改成小于号,即
bool cmp(int a,int b)
return a<b;
则输出 1 2 3 4 5,是升序,与默认的一样,所以通常不需要这么做
*/
对结构体排序
struct node
{
int k,s;
}p[5];//结构体放在函数前面
bool cmp(node x,node y)
{
return x.s>y.s; //根据结构体中的s降序排序(从大到小)
}
int main()
{
for (int i = 0; i < 5; i++)
scanf("%d%d", &p[i].k, &p[i].s);//输入结构体数组
sort(p, p + 5, cmp);//按结构体中s降序排序
return 0;
}
结构体数组简单用法
有三名同学,他们的数学英语成绩如下表
同学 | 数学成绩 | 英语成绩 |
---|---|---|
1号 | 99 | 70 |
2号 | 77 | 80 |
3号 | 66 | 90 |
要求按英语成绩从大到小给1号2号3号同学排序
代码如下
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
int math,english;
}p[3];//结构体记录三个同学的数学英语成绩
bool cmp(node x,node y)
{
return x.english>y.english; //根据结构体中的英语成绩降序排序(从大到小)
}
int main()
{
p[0].math=99,p[0].english=70;//一号同学的数学,英语成绩
p[1].math=77,p[1].english=80;//类推
p[2].math=66,p[2].english=90;
sort(p, p + 3, cmp);//排序
for (int i = 0; i < 3; i++)
printf("第%d号同学的数学成绩为%d,英语成绩为%d\n",i+1, p[i].math, p[i].english);//输出排序后的结构体数组
return 0;
}
/*
输出结果:
第1号同学的数学成绩为66,英语成绩为90
第2号同学的数学成绩为77,英语成绩为80
第3号同学的数学成绩为99,英语成绩为70
Press any key to continue
*/