【实验8-3 排序】 给定n个学生的基本信息,包括学号(由12个数字组成的字符串)、姓
时间: 2023-12-08 08:15:39 浏览: 219
别、年龄和成绩,请按照成绩从高到低输出每个学生的信息。如果成绩相同,则按照年龄从低到高的顺序输出。如果年龄也相同,则按照学号的字典序从低到高输出。
你可以使用快速排序或归并排序等任何排序算法来解决这个问题。以下是一种使用快速排序的方法,你可以参考一下:
```python
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = []
right = []
same = []
for item in arr:
if item[3] > pivot[3]:
left.append(item)
elif item[3] < pivot[3]:
right.append(item)
else:
if item[2] < pivot[2]:
left.append(item)
elif item[2] > pivot[2]:
right.append(item)
else:
if item[0] < pivot[0]:
left.append(item)
else:
same.append(item)
return quick_sort(left) + same + quick_sort(right)
# 测试
students = [
('000000000001', '张三', 18, 95),
('000000000002', '李四', 19, 85),
('000000000003', '王五', 19, 90),
('000000000004', '赵六', 20, 85),
('000000000005', '钱七', 18, 90),
('000000000006', '孙八', 20, 80),
]
sorted_students = quick_sort(students)
for student in sorted_students:
print(student)
```
上面的代码中,我们使用了一个元组来表示每个学生的信息,元组中的第一个元素是学号,第二个元素是姓名,第三个元素是年龄,第四个元素是成绩。
在快速排序的过程中,我们首先选取一个元素作为基准值(pivot),然后将所有小于基准值的元素放到左边,所有大于基准值的元素放到右边,相等的元素放到同一个列表中。然后对左右两边的列表递归调用快速排序函数,最后将结果合并起来即可。
在本例中,我们首先将所有成绩高于基准值的学生放到左边,所有成绩低于基准值的学生放到右边,相同成绩的学生放到同一个列表中。然后对左右两边的列表递归调用快速排序函数,最后将结果和相同成绩的学生列表合并起来。在合并相同成绩的学生时,我们按照年龄从小到大的顺序进行排序,如果年龄也相同,则按照学号的字典序从小到大排序。
阅读全文