课程 286 / 365
78%
数据结构与算法直觉·判断·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。

评分标准

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

本课收口 · 学习证据

完成,不等于随手打一个勾。

确认阅读、保存练习,再用 30 秒检查和一句话总结留下真实学习证据。

0 / 3
02完成本课练习0 / 4 项必填内容已填写
03通过理解检查约 30 秒
稳定排序保证了什么?
你现在更接近哪一种状态?
完成上面三项后,才能把本课记为已验证。

资料来源

继续核对与延伸阅读

本课内容最近更新于