Skip to content

07 排序算法-下:O(n log n) 三剑客(⚠️ 人工关注)

李永乐式比喻

  • 归并排序 = 拆试卷。老师把 100 份试卷分成两组(各 50 份),每组再分,一直分到 1 份。然后按分数高低合并两个有序堆。分而治之
  • 快速排序 = 选班长。从班里选一个人当"基准",比基准高的站右边,低的站左边。两边再各选一个基准……
  • 堆排序 = 淘汰赛。建一个锦标赛淘汰树,冠军就是最大元素。

三剑客对比


性能对比(100 万条数据)

算法比较次数额外内存实际耗时谁在用?
归并排序~2000 万次O(n) ~8MB~0.3ssorted() 用了
快速排序~2000 万次O(log n) 微量~0.2s 最快list.sort() 用了
堆排序~3000 万次O(1) = 0~0.5sTop K 场景

归并排序的分治流程


企业场景

场景用的算法为什么
Python sorted() / list.sort()TimSort(归并+插入混合)稳定 + 利用局部有序性
Java Arrays.sort() 对象数组TimSort同上
Java Arrays.sort() 基本类型双轴快排不需要稳定性
数据库外部排序(数据 > 内存)归并排序只要内存能装 2 页就能无限归并
实时 Top K 排行榜堆排序只维护 K 个元素 O(n log K)

AI 协作

AI 生成:
  - 归并/快排/堆排的 Python 实现 -- 各 15~30 行
  - 可视化三种排序的耗时对比(数据量 1000 -> 100 万)
  - LeetCode 215 第 K 大元素、148 排序链表

人类决策:
  - 数据量 < 1000 -> 插入排序就够了
  - 数据在内存中 -> 语言内置排序已最优化,直接用
  - 数据在磁盘上 -> 归并排序
  - 需要 Top K -> 堆排序

OPC 超级个体实战指南