【发布时间】:2017-11-20 10:44:13
【问题描述】:
所以我正在参加考试,这次考试的很大一部分将是快速排序算法。众所周知,该算法的最佳情况,实际上是平均情况是:O(nlogn)。最坏的情况是O(n^2)。
至于最糟糕的情况,我知道如何解释它:它发生在所选的枢轴是阵列中最小或最大的值时,我们将拥有n Quicksort呼叫可能需要达到ntime(我的意思是分区操作)。我说的对吗?
现在是最佳/平均情况。我读过 Cormens 的书,多亏了那本书,我明白了很多东西,但至于快速排序算法,他专注于如何解释 O(nlogn) 复杂性的数学公式。我只是想知道为什么是O(nlogn),而不是进行一些数学证明。现在我只看到了一些维基百科的解释,如果我们选择一个枢轴,每次将我们的数组分成n/2, n/2+1 部分,那么我们将有一个深度调用树logn,但我不知道是否这样是真的,即使是这样,那为什么是logn。
我知道互联网上有很多关于快速排序的资料,但它们只涉及实现,或者只是告诉我复杂性,而不是解释它。
【问题讨论】:
-
你了解log2是什么吗?你了解每一级递归将剩余工作一分为二的效果吗?
-
是的,我得找一个号码
k比如2^k=n -
是的,所以如果你选择 n, n/2, n/4, n/8, ...,根据定义,就会有 log2(n) 项。
-
每个都需要
n时间,对吧?
标签: algorithm time-complexity quicksort partition logarithm