【发布时间】:2019-05-27 16:19:05
【问题描述】:
我尝试使用分而治之来创建合并排序算法。它由一个合并排序递归函数组成,我相信它是正确的,但在其中它调用了一个合并函数,它也是递归的,但不起作用。所以我想知道是否有人可以帮助我解决这个问题以使其正常工作。我已经看到了使用 while 循环等定义合并的其他解决方案,我在那里得到了想法,但我想看看是否可以递归地编写合并函数。
目前,当我实现代码时,我只得到一个空数组,这令人沮丧。
def mergesort(A):
length_A = len(A)
if length_A > 1:
return merge(
mergesort(A[0:length_A//2]),
mergesort(A[length_A//2 + 1:length_A-1]))
else:
return A
def merge(x,y):
length_x = len(x)
length_y = len(y)
if length_x == 0:
return x
if length_y == 0:
return y
if x[0] <= y[0]:
return x[0] + merge(x[1:length_x -1],y[0:length_y -1])
else:
return y[0] + merge(x[0:length_x-1],y[1:length_y -1])
A = [10, 2, 5, 3, 7, 13, 1, 6]
a = mergesort(A)
print(a)
【问题讨论】:
-
你的缩进有问题,请修复。
-
括号内不需要反斜杠来续行。
-
递归合并会起作用,但它需要 O(n) 堆栈空间来合并 n 个节点,这可能导致大列表的堆栈溢出。
标签: python recursion mergesort