Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm introsort何时从快速排序转变为堆排序?_Algorithm_Sorting_Introsort - Fatal编程技术网

Algorithm introsort何时从快速排序转变为堆排序?

Algorithm introsort何时从快速排序转变为堆排序?,algorithm,sorting,introsort,Algorithm,Sorting,Introsort,从快速排序开始,当递归深度超过基于被排序元素数的级别时,切换到堆排序。那个号码是多少?是否存在特定范围或限制值?从快速排序切换到堆排序的点由深度限制决定: 深度限制=2·⎣日志2(l)⎦ 其中l是要排序的序列的长度,因此‍=‍n表示整个序列。每次递归调用时,深度限制将减少一。当深度限制达到0时,它将从快速排序切换到堆排序。我刚刚试着阅读介绍性文章。上面说 它计算递归深度。如果超过对数深度,则 算法从Quicksort切换到Heapsort以保持最坏情况 快速排序的结果 并通过墨瑟关于Intros

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

从快速排序切换到堆排序的点由深度限制决定:

深度限制=2·⎣日志2(l)⎦


其中l是要排序的序列的长度,因此‍=‍n表示整个序列。每次递归调用时,深度限制将减少一。当深度限制达到0时,它将从快速排序切换到堆排序。

我刚刚试着阅读介绍性文章。上面说

它计算递归深度。如果超过对数深度,则 算法从Quicksort切换到Heapsort以保持最坏情况 快速排序的结果

并通过墨瑟关于Introsort的原始论文

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

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

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


按照你的逻辑,堆头永远不会发生,因为深度限制永远不会达到。@self。你为什么这么认为?请阅读下面我的评论;另一个例子:10000个成员的数组的深度限制为(13*2),如果数组在每个递归上大约分成两半,那么在第14级,子数组将有0个元素。@self。那么一分为二是最好的情况,;在最坏的情况下,序列将分为(1,N-1)。在这种情况下,深度限制达到0。如果在大约第10个深度级别的300个元素的阵列上使用深度限制16,子阵列将有0个元素。