01排序 · SORTING
从混沌到秩序
一列被 Fisher–Yates 洗牌彻底打乱的数,柱高与颜色都代表数值。每种排序算法都在用自己的策略消灭“逆序对”:冒泡和插入一次只修正相邻的一对;希尔排序先做远距离的粗调;快速排序选一个枢轴把序列一分为二;归并排序先分后合;堆排序则借助一棵藏在数组里的二叉树。
白色闪光是正在比较或写入的位置。打开声音,可以“听见”算法的节奏——灵感来自 The Sound of Sorting。
- 比较排序下界
- Ω(n log n)
- 快速排序
- C. A. R. Hoare,1959
- 归并排序
- John von Neumann,1945
# Lomuto 划分:快速排序的核心
partition(a, lo, hi):
pivot ← a[hi]; i ← lo
for j in lo … hi−1:
if a[j] < pivot:
swap(a[i], a[j]); i ← i + 1
swap(a[i], a[hi])
return i