Introsort
概述
定义
Introsort
核心性质
设计动机
纯快速排序的最坏情况为 ,虽然随机化可以降低概率,但无法完全消除。Introsort 通过”内省”(introspective)机制检测退化情况并切换算法,在保持快速排序平均性能的同时,保证最坏情况的渐近最优。
递归深度阈值
选择 作为递归深度阈值的原因:
- 理想情况下快速排序的递归深度为 。
- 给予了足够的容错空间,不会在正常情况下误触发切换。
- 超过此阈值几乎可以确定发生了退化。
C++ std::sort 的实现
Introsort 是 C++ 标准库 std::sort 的底层实现算法(自 C++ 标准化以来)。它提供了:
- 与快速排序相当的平均性能。
- 的最坏情况保证(满足标准要求)。
- 原地排序( 额外空间)。
与其他混合排序的对比
| 算法 | 组合策略 | 最坏时间 |
|---|---|---|
| Introsort | 快速排序 + 堆排序 + 插入排序 | |
| Timsort | 归并排序 + 插入排序 | |
| 纯快速排序 | 仅快速排序 |
章节扩展
第7章:快速排序
Introsort 是快速排序的工程化改进,通过结合堆排序来弥补快速排序最坏情况的不足。CLRS 第7章的习题 7-5 探讨了这一主题。