排序算法
排序是最基础的算法训练。理解它们的 trade-off,比背代码更重要。
常见排序对比
- 冒泡/插入:简单但 O(n²),小规模或基本有序时插入尚可。
- 快排:平均 O(n log n),分治+基准;最坏 O(n²),工程上常随机化或切换阈值。
- 归并:稳定 O(n log n),需额外空间,适合链表与外排序。
- 堆排:O(n log n),原地但不稳定,常用于优先队列。
工程中的选择
语言内置排序(如 Java Arrays.sort、Python sorted)通常对基本类型用双轴快排、对对象用归并的变体,并在小数据量切换插入排序。理解这一点,就不会在"该用什么排序"上纠结。
# Python 一行排序(稳定,Timsort)
sorted(items, key=lambda x: x.score, reverse=True)