【发布时间】:2020-04-29 15:31:11
【问题描述】:
我有 k 个排序数组,每个长度为 n,我想对它们进行排序,所以有一个长度为 n*k 的排序数组。我知道我可以从 Merge Sort 迭代地应用合并功能。但是我不明白为什么下面的代码是 O(nk^2) 而不是 O(nk)。我在 k 数组上迭代一次,每个合并子例程相对于其输入具有线性时间。我哪里错了?如何更好地理解该算法的运行时间?
def myMerge(left, right):
l, r = 0, 0
result = []
for i in left+right:
if left[l] <= right[r]:
result.append(left[l])
l += 1
if l >= len(left):
return result + right[r:]
else:
result.append(right[r])
r += 1
if r >= len(right):
return result + left[l:]
return result
#input
k = [[1,5,8],[2,7,9],[1,1,4]]
result = k[0]
for l in range(1,len(k)):
result = myMerge(result,k[l])
【问题讨论】: