【发布时间】:2022-01-07 01:31:32
【问题描述】:
def partition(l, h):
i, j = l, h
while i < j:
while arr[l] > arr[i]:
i += 1
while arr[j] > arr[l] and j >= 0:
j += 1
if i < j:
arr[i], arr[j] = arr[j], arr[i]
arr[l], arr[j] = arr[j], arr[l]
return j
嵌套while循环的时间复杂度为O(n2),以上sn-p代码来自Quicksort。那么整体时间复杂度O(n log n)如何呢?
【问题讨论】:
-
如果所有级别的循环都执行 n 次,则只需 O(n^2)。但是嵌套循环正在处理数组的较小部分,这使得它 O(n log n)。
-
您确定这是
j += 1而不是j -= 1? -
快速排序实际上是 O(n^2)。在 expected 的情况下只有 O(n lg n)。
-
我很确定代码有问题。第一个内部
while循环条件在开始时永远不会为真,因为i等于l,因此i永远不会增加,即使在值开始被发生的交换移动之后在外循环的末尾。如果无法正常工作,我不确定这段代码是否值得分析! -
理解嵌套循环的复杂性很重要...取决于循环的细节。考虑:
for i in range(10): for j in range(10): print(i*j)是恒定时间
标签: python while-loop nested-loops quicksort