酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

实训内容:(1)用直接插入排序方法进行排序;(2)冒泡排序方法进行排序。 实训目的:(1)熟悉并掌握各种排序方法的设计思路;(2)掌握各种具体排序算法在计算机上的实现。 2. 实施步骤及内容 【问题描述】 对成绩排名,给出学生成绩表,由学号、姓名和各门成绩组成,运用排序算法实现排名。要求:(1)先按总分高低排序,总分高在前; (2)总分相同,数学成绩高在前; (3)总分与数学相同,英语高在前; (4)总分数学英语都相同,学号小在前。

以下是用 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. 在实现排序算法时,要注意边界情况,比如列表为空或只有一个元素的情况。 [2024-11-26 10:24:04 | AI写代码神器 | 895点数解答]

相关提问