题解 | #成绩排序#
成绩排序
http://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b
成绩排序
算法知识视频讲解
较难 通过率:22.85% 时间限制:1秒 空间限制:32M
知识点
排序
题目
题解(23)
讨论(260)
排行
warning 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
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
复制
示例2
输入:
3
1
fang 90
yang 50
ning 70
3
0
moolgouua 43
aebjag 87
b 67
复制
输出:
yang 50
ning 70
fang 90
aebjag 87
b 67
moolgouua 43
复制
说明:
第一组用例:
3
1
fang 90
yang 50
ning 70
升序排序为:
yang 50
ning 70
fang 90
第二组降序为:
aebjag 87
b 67
moolgouua 43
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; struct Student { string name; int age; }; // 当 a > b,则降序(从大到小); bool StudentCmp1(Student stu1, Student stu2) { return stu1.age > stu2.age; } //当a<b,则升序(从小到大) bool StudentCmp2(Student stu1, Student stu2) { return stu1.age < stu2.age; } /* * 排序:升序或降序 * 思想:输入一对数据的数组,其类型设为结构体,将一对数据按照make_pair(T1, T2)格式插入vector, * sort进行排序,默认为升序,cmp函数比较:当a<b为降序。 */ int StudentSort(vector<Student> &stu, int flag) { if(flag == 0) { //0为降序 /*快速排序sort与基于归并排序stable_sort的区别: *对于相等的元素sort可能改变顺序,stable_sort保证排序后相等的元素次序不变; */ // sort(stu.begin(), stu.end(), StudentCmp1); // 快速排序 stable_sort(stu.begin(), stu.end(), StudentCmp1); // 快速排序 } else if (flag == 1) { //1 为升序 stable_sort(stu.begin(), stu.end(), StudentCmp2); // 基于归并排序实现的 } return 0; } int main() { int num; int flag; vector<Student> stu; while(cin>>num>>flag) { stu.clear(); for(int i = 0; i < num; i++) { Student stuTemp; cin>>stuTemp.name>>stuTemp.age; stu.push_back(stuTemp); //cin>>stu[i].name>>stu[i].age; // vector不能直接赋值,静态数组可以直接赋值 } int ret = StudentSort(stu, flag); if (ret == -1) { return -1; } for(auto iter = stu.begin(); iter != stu.end(); ++iter) { cout<<iter->name<<" "<<iter->age<<endl; } /* for(int i = 0; i < stu.size(); i++) { cout<<stu[i].name<<" "<<stu[i].age<<endl; } */ } return 0; }