Quicksort中枢轴的选择

时间:2017-05-17 15:56:24

标签: algorithm quicksort

快速排序中分区元素的理想选择是

  

(A)清单的第一个要素

     

(B)清单的最后一个要素

     

(C)列表中随机选择的元素

     

(D)名单的中位数

答案是(A)但根据我的说法,它应该是(D)。我哪里错了?

2 个答案:

答案 0 :(得分:1)

选择(A)或(B)会导致Quicksort出现最糟糕的情况,时间复杂度为O(n²)。

随机选择会改变这种糟糕的性能,算法将有效运行。

选择中值元素仍然足以防止算法表现不佳。问题是每次迭代它是一个常数因子。

所以(C)或(D)都可以。

来自Wikipedia

在Quicksort的早期版本中,通常会选择分区最左边的元素作为枢轴元素。不幸的是,这会导致已经排序的数组的最坏情况行为,这是一个相当常见的用例。通过选择枢轴的随机索引,选择分区的中间索引或(特别是对于较长的分区)选择分区的第一个,中间和最后一个元素的中位数,可以轻松解决问题。

答案 1 :(得分:0)

  

答案:(D)名单的中位数

每次我们将中位数作为枢轴元素template: {{str}} 。然后用最后一个元素替换中位数(它是你的算法的a / c意味着你选择的枢轴在这里我假设最后一个元素作为枢轴。 )它将需要using partition algorithm it takes O(n) time,并且每次将问题分成两半

  

T(n)= O(n)+ 2T(n / 2)使用主定理求解并得到复杂度   O(nlogn)

在上面的等式中O(1) constant time to replace last element with median