这道题他的题目描述有一点模糊,他的测试用例上面在对于相同的值排序应该排序前后顺序不变。这时我们就要用到C++ sort类函数stable_sort()。
- stable_sort 排序前后相同元素的值相对顺序不变
题目描述:
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示: jack 70 peter 96 Tom 70 smith 67
从高到低 成绩 peter 96 jack 70 Tom 70 smith 67 > 从低到高 smith 67 Tom 70 jack 70 peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开 输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开示例1 输入
3 0
fang 90
yang 50
ning 70输出
fang 90
ning 70
yang 50
下面直接上代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct node {
int grade;
char name[500];
};
int flag;
bool comper(node a, node b)
{
if (!flag)
{
return a.grade > b.grade;
}
return a.grade < b.grade;
}
int main() {
int num;
node per[500];
while (~scanf("%d%d", &num, &flag))
{
for (int i = 0; i < num; i++)
{
scanf("%s%d", per[i].name, &per[i].grade);
}
stable_sort(per, per + num,comper);
for (int i = 0; i < num; i++)
{
printf("%s %d\n", per[i].name, per[i].grade);
}
}
return 0;
}