本章进度 11 / 18
61%
数据结构与算法直觉·判断·13 分钟
正文已完成

排序前先定义相等与稳定性

判断多字段排序、稳定排序和原地修改对产品结果的影响。

L286
为什么现在学

把“查找与排序”从听懂变成会判断,避免遇到真实任务时仍靠感觉选择。

本课会用什么
  • 无需安装新工具
  • 准备一个可对照的真实问题或样本

“按优先级排序”往往不够。当优先级相同,是保持原到达顺序、再按时间,还是按名称?排序是否修改原集合?这些决定会改变用户看到的结果,也决定测试能否复现。

这一课的结果

能为一项排序需求写出完整比较规则,并说明相等项的处理。

核心概念

先把关键判断说清楚

01

比较器必须覆盖相等

比较规则不仅要说明谁在前,还要说明主字段相同时用什么次字段或保留原顺序。

02

稳定性保存原有关系

稳定排序让比较结果相等的元素维持输入顺序,适合先按一个字段排好再叠加另一个字段。

03

原地排序会改变共享状态

如果多个界面引用同一列表,直接修改可能让另一个界面的顺序悄悄变化;复制排序更安全但占用额外空间。

案例拆解

工单列表的可复现排序

工单按优先级展示,但同优先级每次刷新顺序不同,客服难以确认刚才处理到哪里。

  1. 01

    主字段定义为优先级 P0→P3。

  2. 02

    同优先级按创建时间升序,时间相同再按工单 ID 升序。

  3. 03

    在派生列表上排序,不修改原始响应缓存。

案例结果

任意刷新都得到相同顺序,其他视图也不受排序副作用影响。

提交前练习

现在轮到你

为一个多字段列表写出可复现的排序契约。

完成本课需要:完成以下内容用于本课收口。

内容会自动保存在当前设备
查看参考答案与评分标准

参考答案

主键是截止日期升序,空值最后;相等时按创建时间升序,再按任务 ID;从原数组复制后排序;样例 T3(8/1)、T1(8/1)、T2(空) 依创建时间输出 T1、T3、T2。

评分标准

  • 主键含方向与空值
  • 相等项有确定规则
  • 样例可以验证比较器

本课收口 · 应用检查

完成一次应用,再检查理解

完成一次必填练习,再通过理解检查;阅读标记和总结不设硬门槛。

0 / 2
02完成本课必填练习0 / 4 项必填内容已填写03通过理解检查点此去回答,约 30 秒
04补一句总结(可选)可以留空,不影响完成本课。
稳定排序保证了什么?
你现在更接近哪一种状态?
尚有必填项未完成,请补齐后再继续。

资料来源

继续核对与延伸阅读

本课内容最近更新于 。