7

Introsort从快速排序开始,当递归深度超过基于被排序元素数量的级别时,切换到堆排序。那个号码是多少?是否有特定范围或限制值?

4

2 回答 2

8

Introsort算法从 Quicksort 切换到 Heapsort 的点由depth_limit确定:

depth_limit = 2 · ⎣log 2 ( l )⎦</p>

其中l是要排序的序列的长度,所以l ‍=‍<em>n 代表整个序列。每次递归调用depth_limit减一。当depth_limit达到 0 时,它会从 Quicksort 切换到 Heapsort。

于 2012-06-24T07:13:44.750 回答
2

我刚刚尝试阅读介绍性的Wikipedia 文章。它说

它计算递归深度。如果超过对数深度,算法会从 Quicksort 切换到 Heapsort,以保持 Quicksort 的最坏情况结果下降

并通过 Musser 关于 Introsort 的原始论文。

它说 introsort 比 heapsort 慢,因为它在切换到 heapsort 之前执行 2*log(2,N) 计算。

我的理解是递归深度是 2*log(2,N)

对于要排序的 N=300 个元素,它将是 2*8 = 16

于 2012-06-24T07:16:25.620 回答