寻找有关quicksort的算法复杂性的澄清

时间:2013-02-26 07:19:42

标签: algorithm sorting quicksort

有人可以解释为什么quicksort的最佳案例运行时不是线性的吗?有没有办法使quicksort线性的最佳案例运行时间?如果是这样,为什么它们通常不在实践中使用?

4 个答案:

答案 0 :(得分:1)

你至少应该通过维基链接...他们已经用图表n动画解释了这很容易理解。

http://en.wikipedia.org/wiki/Quicksort

答案 1 :(得分:0)

Quicksort在O(n 2 )时间最差情况下运行,但最佳/平均O(n log n)。尽管其最坏情况较高,但在实践中它的表现优于heapsort和mergesort(最差情况为O(n log n)排序)。

排序只能以线性时间运行,除非它们已经排序,并且这仅适用于具有最佳情况O(n)的排序,如insertion sort

答案 2 :(得分:0)

当然,您可以先检查输入是否已经排序,如果是,则立即返回。这产生具有线性最佳情况复杂度的算法。但是最后你得到了一个“Modfied Quicksort”而不是“Quicksort”。

答案 3 :(得分:0)

Quicksort是一种直接比较排序方法。每个这样的方法在每个步骤(即直接比较)上使用二元决策来在分选的两个可能结果之间进行分支。 N个元素数组的所有可能排序都是N!因此,能够输出这些结果中的每一个的二元决策树的最低高度是log(N!),可以证明,尽管O(log(N!))= O(N *)非常简单日志(N))。因此,没有直接比较排序算法可能比这个更好的复杂性。

因此,由于quicksort是这种算法的一个例子,它的复杂度永远不会低于O(N * log(N)),因此它不能是线性的。