成绩排序
题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
输入例子:
3
0
fang 90
yang 50
ning 70
输出例子:
fang 90
ning 70
yang 50
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 typedef struct stu{ 6 string s; 7 int score; 8 int i; 9 }Stu; 10 11 bool cmp1(struct stu a, struct stu b){ 12 if(a.score != b.score) 13 return a.score < b.score; 14 else 15 return a.i < b.i; 16 } 17 //降序 18 bool cmp2(struct stu a, struct stu b){ 19 if(a.score != b.score) 20 return a.score > b.score; 21 else 22 return a.i < b.i; 23 } 24 25 int main(){ 26 int num; 27 bool flag; 28 while(cin >> num){ 29 Stu *a = new Stu [num]; 30 cin >> flag; 31 for(int i = 0; i < num; i++){ 32 cin >> a[i].s >> a[i].score; 33 a[i].i = i; 34 } 35 if(flag == 0){ 36 sort(a, a+num, cmp2); 37 }else{ 38 sort(a, a+num, cmp1); 39 } 40 41 for(int i = 0; i < num; i++){ 42 cout << a[i].s << " " << a[i].score << endl; 43 } 44 delete [] a; 45 } 46 return 0; 47 }
越努力,越幸运