多条件排序(Multi-Criteria Sorting)
字数 647 2025-10-29 00:00:25
多条件排序(Multi-Criteria Sorting)
题目描述:给定一个包含学生信息的数组,每个学生有姓名、成绩和年龄三个属性。要求实现一个排序算法,首先按成绩从高到低排序,如果成绩相同,则按年龄从小到大排序,如果年龄也相同,则按姓名字典序排序。
解题过程:
-
理解排序规则:
- 主排序条件:成绩(降序)
- 次级排序条件1:年龄(升序)
- 次级排序条件2:姓名(字典序升序)
-
比较函数设计:
- 当比较两个学生对象时,先比较主条件(成绩)
- 如果成绩不同,按成绩降序规则返回比较结果
- 如果成绩相同,比较次级条件1(年龄)
- 如果年龄不同,按年龄升序规则返回比较结果
- 如果年龄也相同,比较次级条件2(姓名)
- 按姓名字典序升序返回比较结果
-
具体实现步骤:
def compare_students(a, b): # 第一条件:成绩降序 if a.score != b.score: return b.score - a.score # 降序排列 # 第二条件:年龄升序 if a.age != b.age: return a.age - b.age # 升序排列 # 第三条件:姓名字典序 if a.name < b.name: return -1 elif a.name > b.name: return 1 else: return 0 -
排序算法选择:
- 可以使用任何稳定的排序算法
- 在现代编程语言中,通常使用内置的排序函数
- 示例(Python):
students.sort(key=lambda x: (-x.score, x.age, x.name)) -
验证示例:
- 输入:[("Alice", 85, 20), ("Bob", 85, 19), ("Charlie", 90, 21)]
- 排序后:[("Charlie", 90, 21), ("Bob", 85, 19), ("Alice", 85, 20)]
- 解释:Charlie成绩最高排第一,Bob和Alice成绩相同,但Bob年龄更小排前面
关键要点:
- 多条件排序的核心是定义清晰的比较规则
- 条件优先级从高到低依次比较
- 使用稳定的排序算法可以保证相同关键字的相对顺序不变
- 实际编程中可以利用元组比较的特性简化实现