计算机考研复试真题 成绩排序
题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
示例:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入
3 0 fang 90 yang 50 ning 70
输出
fang 90 ning 70 yang 50
--------------------------------------------------------------------------------------------------------------------------
/* 解题思路:貌似用二维向量+桶排序能解决,但是还没学习,先码住以后再看。 大概思路就是用一个二维向量,把每个分数连带姓名存在向量里,升序的话就顺序输出向量(即二维数组),降序的话就反序输出即可, 这大概就是桶排序也成基数排序的思想,适用于分布均匀的元素。 */ #include <iostream> #include <vector> #include <string.h> using namespace std; int main(){ int n; while(cin >> n){ int flag; cin >> flag; string name; int score; vector<vector<string> > students(101, vector<string>()); for(int i = 0;i < n;i++){ cin >> name >> score; students[score].push_back(name); } if(flag){ for(int i = 0;i < students.size();i++){ for(int j = 0;j < students[i].size();j++) cout << students[i][j] << " " << i << endl; } } else{ for(int i = students.size() - 1;i >= 0;i--){ for(int j = 0;j < students[i].size();j++) cout << students[i][j] << " " << i << endl; } } } return 0; }