多条件排序(Multi-Criteria Sorting)
字数 647 2025-10-29 00:00:25

多条件排序(Multi-Criteria Sorting)

题目描述:给定一个包含学生信息的数组,每个学生有姓名、成绩和年龄三个属性。要求实现一个排序算法,首先按成绩从高到低排序,如果成绩相同,则按年龄从小到大排序,如果年龄也相同,则按姓名字典序排序。

解题过程

  1. 理解排序规则

    • 主排序条件:成绩(降序)
    • 次级排序条件1:年龄(升序)
    • 次级排序条件2:姓名(字典序升序)
  2. 比较函数设计

    • 当比较两个学生对象时,先比较主条件(成绩)
    • 如果成绩不同,按成绩降序规则返回比较结果
    • 如果成绩相同,比较次级条件1(年龄)
    • 如果年龄不同,按年龄升序规则返回比较结果
    • 如果年龄也相同,比较次级条件2(姓名)
    • 按姓名字典序升序返回比较结果
  3. 具体实现步骤

    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
    
  4. 排序算法选择

    • 可以使用任何稳定的排序算法
    • 在现代编程语言中,通常使用内置的排序函数
    • 示例(Python):
    students.sort(key=lambda x: (-x.score, x.age, x.name))
    
  5. 验证示例

    • 输入:[("Alice", 85, 20), ("Bob", 85, 19), ("Charlie", 90, 21)]
    • 排序后:[("Charlie", 90, 21), ("Bob", 85, 19), ("Alice", 85, 20)]
    • 解释:Charlie成绩最高排第一,Bob和Alice成绩相同,但Bob年龄更小排前面

关键要点

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