假设我们选择一个pivot作为快速排序的数组的第一个元素。现在,最佳/最差情况复杂度为O(n^2)
,而在一般情况下为O(nlogn)
。是不是很奇怪(最好的案例复杂性大于最坏情况的复杂性)?
答案 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)
。 ;)
因此选择一个好的支点很重要。例如,通过使用子阵列的第一个,中间和最后一个元素的中位数作为支点。