快速排序中分区元素的理想选择是
(A)清单的第一个要素
(B)清单的最后一个要素
(C)列表中随机选择的元素
(D)名单的中位数
答案是(A)但根据我的说法,它应该是(D)。我哪里错了?
答案 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
。