Python 实训:用直接插入与冒泡排序实现学生成绩复杂排名
以下是用 Python 实现上述排序需求的代码: ```python class Student: def __init__(self, student_id, name, total_score, math_score, english_score): self.student_id = student_id self.name = name self.total_score = total_score self.math_score = math_score self.english_score = english_score def insertion_sort(students): """ 直接插入排序函数 :param students: 学生对象列表 :return: 排序后的学生对象列表 """ for i in range(1, len(students)): key = students[i] j = i - 1 while j >= 0 and (key.total_score > students[j].total_score or (key.total_score == students[j].total_score and (key.math_score > students[j].math_score or (key.math_score == students[j].math_score and (key.english_score > students[j].english_score or (key.english_score == students[j].english_score and key.student_id < students[j].student_id))))): students[j + 1] = students[j] j -= 1 students[j + 1] = key def bubble_sort(students): """ 冒泡排序函数 :param students: 学生对象列表 :return: 排序后的学生对象列表 """ n = len(students) for i in range(n): for j in range(0, n - i - 1): if (students[j].total_score < students[j + 1].total_score or (students[j].total_score == students[j + 1].total_score and (students[j].math_score < students[j + 1].math_score or (students[j].math_score == students[j + 1].math_score and (students[j].english_score < students[j + 1].english_score or (students[j].english_score == students[j + 1].english_score and students[j].student_id > students[j + 1].student_id))))): students[j], students[j + 1] = students[j + 1], students[j] # 测试数据 students = [ Student(1, "Alice", 85, 70, 80), Student(2, "Bob", 90, 85, 75), Student(3, "Charlie", 85, 80, 70), Student(4, "David", 90, 85, 80), Student(5, "Eve", 85, 70, 85) ] # 直接插入排序 insertion_sort(students) print("直接插入排序结果:") for student in students: print(f"学号:{student.student_id},姓名:{student.name},总分:{student.total_score}") # 冒泡排序 students = [ Student(1, "Alice", 85, 70, 80), Student(2, "Bob", 90, 85, 75), Student(3, "Charlie", 85, 80, 70), Student(4, "David", 90, 85, 80), Student(5, "Eve", 85, 70, 85) ] bubble_sort(students) print("冒泡排序结果:") for student in students: print(f"学号:{student.student_id},姓名:{student.name},总分:{student.total_score}") ``` 额外需要注意的逻辑点: 1. 比较条件的逻辑要清晰准确,确保能够按照题目要求的优先级进行排序。 2. 对于学生对象的属性操作要小心,避免错误修改或访问不存在的属性。 3. 在实现排序算法时,要注意边界情况,比如列表为空或只有一个元素的情况。 ######[AI写代码神器 | 895点数解答 | 2024-11-26 10:24:04]
- C 语言:快速实现 5 个学生信息录入、按成绩升序排序并输出!(字节豆包 | 373点数解答 | 2024-10-30 00:37:20)432
- C语言实现:输入5名学生信息并按成绩升序排序输出(字节豆包 | 354点数解答 | 2024-10-30 18:45:58)381
- C语言:输入5个学生信息,按成绩升序排序并输出(字节豆包 | 373点数解答 | 2024-10-31 19:49:58)374
- C语言:输入5名学生信息并按成绩升序排序输出(字节豆包 | 326点数解答 | 2025-01-01 20:11:47)375
- 成绩等级统计:20个60 - 100分成绩的等级数量揭秘(字节豆包 | 219点数解答 | 2025-04-09 10:20:32)241
- 培训机构学员成绩与年龄更新:C++ 代码实现(DeepSeek | 186点数解答 | 2025-12-16 18:04:31)90
- Python 处理培训机构学员培训后年龄与 NOIP 成绩提升情况(DeepSeek | 73点数解答 | 2025-12-16 18:05:20)93
- 培训机构学员成绩提升:C++代码实现年龄与NOIP成绩更新(DeepSeek | 178点数解答 | 2025-12-31 12:20:24)84
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)498
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)382
- C++ 实现学生成绩统计:最高分、最低分、不及格与优秀人数计算(字节豆包 | 489点数解答 | 2026-04-12 10:09:58)14
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)451