有人可以解释为什么quicksort的最佳案例运行时不是线性的吗?有没有办法使quicksort线性的最佳案例运行时间?如果是这样,为什么它们通常不在实践中使用?
答案 0 :(得分:1)
你至少应该通过维基链接...他们已经用图表n动画解释了这很容易理解。
答案 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)),因此它不能是线性的。