02:成绩排序
总时间限制: 1000ms 内存限制: 65536kB
问题描述
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
输入
第一行为n (0 < n < 20),表示班里的学生数目;
接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。
输出
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
样例输入
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28
样例输出
Joey 92
Hanmeimei 90
Kitty 80
Tim 28
思路
简单的排序问题,每个待排序的对象包括两个元素,需要用二维数组或者结构体数组。
这里采用结构体数组的方法,采用选择排序实现。
【注意】题目中说名字字典序,是整个字符串,并不代表首字母。
1.选择排序
简单的说就是,从原有的数组中选择最大/最小的数依次加入新的数组,并从原数组中删除这个值。 这里我们只用一个数组,前部是已排序的(新数组),后部是待排序的(旧数组)
2. 快速排序
(1) 首先,从数组中选择一个元素,这个元素被称为基准值(pivot)。
(2) 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
(3) 左右两边分别排序,直到各区间只有一个数。
代码实现
1 |
|