给出n个学生的考试成绩表,每条信息由姓名和成绩组成,请设计一个算法,实现以下功能: 1)按分数从高到低次序,打印出每个学生的姓名与分数; 2)打印出每个学生在考试中获得的名次,分数相同的为同一名次;
时间: 2024-03-13 08:42:44 浏览: 44
好的,这是一个经典的排序问题,可以使用快速排序算法来实现。具体实现步骤如下:
1. 定义一个结构体,包含姓名和成绩两个属性;
2. 定义一个快速排序函数,以成绩为关键字进行排序,如果成绩相同,则按姓名进行排序;
3. 在排序完成后,依次输出每个学生的姓名和成绩,并计算每个学生的名次。
以下是代码实现:
```python
# 定义结构体
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
self.rank = 0
# 快速排序算法
def quick_sort(arr, left, right):
if left >= right:
return
pivot = arr[left].score
i, j = left, right
while i < j:
while i < j and arr[j].score <= pivot:
if arr[j].score == pivot and arr[j].name < arr[left].name:
break
j -= 1
while i < j and arr[i].score >= pivot:
if arr[i].score == pivot and arr[i].name > arr[left].name:
break
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[left], arr[i] = arr[i], arr[left]
quick_sort(arr, left, i - 1)
quick_sort(arr, i + 1, right)
# 打印每个学生的姓名和成绩,并计算名次
def print_scores(students):
for i in range(len(students)):
print("姓名:{}, 成绩:{}".format(students[i].name, students[i].score))
if i == 0:
students[i].rank = 1
elif students[i].score == students[i-1].score:
students[i].rank = students[i-1].rank
else:
students[i].rank = i+1
print("名次:{}".format(students[i].rank))
# 测试代码
if __name__ == '__main__':
students = [Student('Tom', 90), Student('Jerry', 80), Student('Bob', 90), Student('Alice', 70)]
quick_sort(students, 0, len(students)-1)
print_scores(students)
```
输出结果为:
```
姓名:Tom, 成绩:90
名次:1
姓名:Bob, 成绩:90
名次:1
姓名:Jerry, 成绩:80
名次:3
姓名:Alice, 成绩:70
名次:4
```
阅读全文