给定学生的成绩单,成绩单中包含每个学生的姓名和分数,请按照要求将成绩单按成绩从高到低或从低到高的顺序进行重新排列。
对于成绩相同的学生,无论以哪种顺序排列,都要按照原始成绩单中靠前的学生排列在前的规则处理。
输入格式
第一行包含整数 NN,表示学生个数。
第二行包含一个整数 00 或 11,表示排序规则,00 表示从高到低,11 表示从低到高。
接下来 NN 行,每行描述一个学生的信息,包含一个长度不超过 1010 的小写字母构成的字符串表示姓名以及一个范围在 0∼1000∼100 的整数表示分数。
输出格式
输出重新排序后的成绩单。
每行输出一个学生的姓名和成绩,用单个空格隔开。
数据范围
1≤N≤10001≤N≤1000
输入样例1:
4
0
jack 70
peter 96
Tom 70
smith 67
输出样例1:
peter 96
jack 70
Tom 70
smith 67
输入样例2:
4
1
jack 70
peter 96
Tom 70
smith 67
输出样例2:
smith 67
jack 70
Tom 70
peter 96
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n, m;
struct student{
string name;
int score;
}stu[1005];
void compare()
{
if( m == 1)
{
for(int i = 0; i < n - 1; i ++)
{
for(int j = 0; j < n - 1 - i; j ++)
{
if(stu[j].score > stu[j + 1].score)
{
int temp = stu[j].score;
stu[j].score = stu[j + 1].score;
stu[j + 1].score = temp;
string te = stu[j].name;
stu[j].name = stu[j + 1].name;
stu[j + 1].name = te;
}
}
}
}
else
{
for(int i = 0; i < n - 1; i ++)
{
for(int j = 0; j < n - 1 - i; j ++)
{
if(stu[j].score < stu[j + 1].score)
{
int temp = stu[j].score;
stu[j].score = stu[j + 1].score;
stu[j + 1].score = temp;
string te = stu[j].name;
stu[j].name = stu[j + 1].name;
stu[j + 1].name = te;
}
}
}
}
}
int main()
{
string x;
int t;
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i ++)
{
cin >> x >> t;
stu[i].name = x;
stu[i].score = t;
}
compare();
for(int i = 0; i < n; i ++)
cout << stu[i].name << " " << stu[i].score <<endl;
return 0;
}