對數(shù)組排序
//頭文件
#include<algorithm>
using namespace std;
int a[5]={1,3,4,2,5};
sort(a,a+5);//輸出結(jié)果:1 2 3 4 5
//sort默認(rèn)從小到大排序 (升序)
//從大到小排序(降序)
bool cmp(int a,int b)
return a>b;
sort(a,a+5,cmp);//輸出結(jié)果:5 4 3 2 1
/*如果將cmp函數(shù)大于號改成小于號,即
bool cmp(int a,int b)
return a<b;
則輸出 1 2 3 4 5,是升序,與默認(rèn)的一樣,所以通常不需要這么做
*/
對結(jié)構(gòu)體排序
struct node
{
int k,s;
}p[5];//結(jié)構(gòu)體放在函數(shù)前面
bool cmp(node x,node y)
{
return x.s>y.s; //根據(jù)結(jié)構(gòu)體中的s降序排序(從大到小)
}
int main()
{
for (int i = 0; i < 5; i++)
scanf("%d%d", &p[i].k, &p[i].s);//輸入結(jié)構(gòu)體數(shù)組
sort(p, p + 5, cmp);//按結(jié)構(gòu)體中s降序排序
return 0;
}
結(jié)構(gòu)體數(shù)組簡單用法
有三名同學(xué),他們的數(shù)學(xué)英語成績?nèi)缦卤?/p>
| 同學(xué) | 數(shù)學(xué)成績 | 英語成績 |
|---|---|---|
| 1號 | 99 | 70 |
| 2號 | 77 | 80 |
| 3號 | 66 | 90 |
要求按英語成績從大到小給1號2號3號同學(xué)排序
代碼如下
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
int math,english;
}p[3];//結(jié)構(gòu)體記錄三個同學(xué)的數(shù)學(xué)英語成績
bool cmp(node x,node y)
{
return x.english>y.english; //根據(jù)結(jié)構(gòu)體中的英語成績降序排序(從大到?。?
}
int main()
{
p[0].math=99,p[0].english=70;//一號同學(xué)的數(shù)學(xué),英語成績
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號同學(xué)的數(shù)學(xué)成績?yōu)?d,英語成績?yōu)?d\n",i+1, p[i].math, p[i].english);//輸出排序后的結(jié)構(gòu)體數(shù)組
return 0;
}
/*
輸出結(jié)果:
第1號同學(xué)的數(shù)學(xué)成績?yōu)?6,英語成績?yōu)?0
第2號同學(xué)的數(shù)學(xué)成績?yōu)?7,英語成績?yōu)?0
第3號同學(xué)的數(shù)學(xué)成績?yōu)?9,英語成績?yōu)?0
Press any key to continue
*/