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
Algorithm “快速排序”从nlgn转换为n2的切点是什么?_Algorithm_Sorting - Fatal编程技术网

Algorithm “快速排序”从nlgn转换为n2的切点是什么?

Algorithm “快速排序”从nlgn转换为n2的切点是什么?,algorithm,sorting,Algorithm,Sorting,我知道算法的最坏情况——当元素已经排序或所有元素都相同时,但我想知道算法从nlgn复杂度移动到n2的点。这取决于我们如何选择轴 一种观点认为,当所有元素都已排序时。嗯,这不是100%正确。在这种情况下,如果我们选择第一个元素作为轴心,复杂性将变为N^2 既然我们有 TN=TN-1+cN N>1,如果你擅长基础数学,那么: T(N) = O(N^2) 如上所述,这取决于我们如何选择轴。虽然在一些教科书中,它主要选择了第一个支点,但没有重新开始 一种流行的方法是:三个分区的中值。它选择[left

我知道算法的最坏情况——当元素已经排序或所有元素都相同时,但我想知道算法从nlgn复杂度移动到n2的点。

这取决于我们如何选择轴

一种观点认为,当所有元素都已排序时。嗯,这不是100%正确。在这种情况下,如果我们选择第一个元素作为轴心,复杂性将变为N^2

既然我们有

TN=TN-1+cN N>1,如果你擅长基础数学,那么:

 T(N) = O(N^2)
如上所述,这取决于我们如何选择轴。虽然在一些教科书中,它主要选择了第一个支点,但没有重新开始


一种流行的方法是:三个分区的中值。它选择[left]、[right]和[left+right/2]的中值。

当所选轴未分割数组时,快速排序的最坏情况发生。例如,如果我们每次都选择第一个元素作为轴心,并且数组已经排序,那么数组根本不会被分割。因此复杂性在^2上

为了避免这种情况,我们将轴的索引随机化。假设pivot将数组拆分为两个大小相等的部分,则在log n上的复杂性为


有关精确分析,请参见

中的“形式分析”部分,它的性能最差,即

在^2上

在下列情况下

如果列表已排序,且pivot是第一个元素 若列表按相反顺序排序,且轴是最后一个元素。 如果列表中的所有元素都相同。在这种情况下,轴选择无关紧要。
注意-如果选择pivot作为中间值,则“已排序”不可能是最坏的情况。

当元素已排序时。。。。您选择的轴心点总是第一个或最后一个元素。是否有一个特定的转换点发生?