Introsort算法从Quicksort切换到Heapsort的点由depth_limit决定: depth_limit = 2 · ⎣log2(l)⎦ 其中l是要排序的序列长度,因此整个序列的l=n。每次递归调用时,depth_limit减少1。当depth_limit达到0时,它从Quicksort转换为Heapsort。
我刚试着阅读了维基百科文章的介绍(链接)。它说:算法会计算递归深度。如果超过对数深度,算法会从快速排序切换到堆排序,以保持快速排序的最坏情况结果。并且通过Musser的原始论文介绍了Introsort。论文中提到,Introsort比Heapsort慢,因为在切换到堆排序之前要执行2*log(2,N)次计算。我的理解是递归深度是2*log(2,N)例如:对于要排序的300个元素,递归深度将是2*8=16。