快速排序的基本困惑

时间:2013-06-05 15:25:52

标签: algorithm sorting quicksort

假设我们选择一个pivot作为快速排序的数组的第一个元素。现在,最佳/最差情况复杂度为O(n^2),而在一般情况下为O(nlogn)。是不是很奇怪(最好的案例复杂性大于最坏情况的复杂性)?

2 个答案:

答案 0 :(得分:3)

最佳案例复杂性为O(nlogn),与平均情况一样。最糟糕的情况是O(n^2)。检查http://en.wikipedia.org/wiki/Quick_sort

虽然其他算法(如合并排序和堆排序)具有更好的最差情况复杂度(O(nlogn)),但通常快速排序更快 - 这就是为什么它是最常用的排序算法。有关这方面的有趣答案可以在Why is quicksort better than mergesort?找到。

答案 1 :(得分:0)

快速排序0(nlogn)的最佳情况是所选择的枢轴在每次迭代中将子阵列分成两个+ - 大小相等的部分。

快速排序的最坏情况是选择的枢轴是子阵列中的最小元素,因此阵列分为两部分,其中一部分由一个元素(枢轴)和所有其他元素的另一部分组成子阵列。

因此,选择第一个元素作为已排序数组中的数据透视图,将获得0(n^2)。 ;)

因此选择一个好的支点很重要。例如,通过使用子阵列的第一个,中间和最后一个元素的中位数作为支点。