数据结构统计成绩:给出n个学生的考试成绩表,每条信息由姓名和分数组成,试使用实现冒泡排序和简单选择排序设计算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2) 按名次列出每个学生的姓名与分数。写出代码
时间: 2025-01-04 15:38:52 浏览: 8
首先,让我们分别介绍如何使用冒泡排序和简单选择排序来解决这个问题。
**1. 冒泡排序算法实现:**
```python
def bubble_sort(scores):
n = len(scores)
for i in range(n):
for j in range(0, n-i-1):
# 如果当前学生比下一个学生分数低,则交换他们
if scores[j][1] < scores[j+1][1]:
scores[j], scores[j+1] = scores[j+1], scores[j]
# 给分数相同的同学分配相同名次
last_score = None
rank = 1
for score in sorted(scores, key=lambda x: x[1]):
if score[1] != last_score:
rank += 1
last_score = score[1]
print(f"学生 {score[0]} 的名次:{rank}, 分数:{score[1]}")
# 使用示例数据
scores_data = [
["张三", 85],
["李四", 90],
["王五", 85],
["赵六", 92],
["刘七", 87]
]
bubble_sort(scores_data)
```
**2. 简单选择排序算法实现:**
```python
def selection_sort(scores):
for i in range(len(scores)):
min_index = i
for j in range(i+1, len(scores)):
# 找到剩余部分中最小的分数索引
if scores[j][1] < scores[min_index][1]:
min_index = j
# 将找到的最小分数的学生与当前位置的学生交换
scores[i], scores[min_index] = scores[min_index], scores[i]
# 更新排名
last_score = None
rank = 1
for score in scores[:i+1]:
if score[1] != last_score:
rank += 1
last_score = score[1]
print(f"学生 {score[0]} 的名次:{rank}, 分数:{score[1]}")
# 示例数据
selection_sort(scores_data)
```
注意:以上代码假设输入是一个二维列表,每个元素都是一个包含姓名和分数的元组。在实际应用中,你需要根据你的数据格式调整代码。
阅读全文