主要观点:Python 库中 Python 3.11 的 CPython 和 PyPy 参考实现采用了 powersort 替代 Timsort 的合并策略,自 2025 年 6 月起,numpy 也使用了 powersort,此外 powersort 还在 AssemblyScript 中使用且效果显著;介绍了自适应排序,包括自然合并排序、近最优合并排序(peeksort 和 powersort)及其原理和特点等。
关键信息:
- Python 3.11 的 CPython 和 PyPy 采用 powersort 替代 Timsort 合并策略。
- 自然合并排序通过检测现有已排序段节省工作,但合并顺序可能不是最优的。
- 确定合并最佳顺序的问题等价于已研究的编码问题,近最优合并排序依赖计算近最优二叉搜索树的方法。
- peeksort 通过在数组中间寻找最接近的运行边界模拟将概率减半,无需提前检测运行。
- powersort 基于方法 2 或其修改版,类似 Timsort 从左到右处理输入并检测运行,根据运行的“功率”决定是否合并。
重要细节: - CPython 中 powersort 用于 Tim Peters 的新 C 代码排序列表,在 PyPy 中也有相应的 powersort 实现。
- 自然合并排序在某些输入上比 bottom-up mergesort 快,但合并顺序可能不是最优的。
- 近最优合并排序的两种方法(方法 1 和方法 2)及其特点在文中有详细说明,peeksort 可延迟检测运行边界,powersort 基于方法 2 处理输入并决定合并。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。