我今天刚刚学习了Python,正在尝试递归实现Mergesort。。。我完全搞不清楚我做错了什么。有人能帮忙吗?你知道吗
def mergesort(A):
if len(A) < 2:
return A
middle = len(A) // 2
L = mergesort(A[:middle])
R = mergesort(A[middle:])
return merge(L, R)
# Merge - combine part of mergesort
def merge(Lsort, Rsort):
sort = [None] * (len(Lsort + Rsort))
i = 0
j = 0
k = 0
while (len(Lsort) <= len(sort)) or (len(Rsort) <= len(sort)):
if Lsort[i] < Rsort[j]:
sort[k] = Lsort[i]
i += 1
else:
sort[k] = Rsort[j]
j += 1
k += 1
return sort
这与Python无关,而是与逻辑有关。你知道吗
将
while
表达式更改为和
if
表达式以下是http://interactivepython.org/runestone/static/pythonds/SortSearch/TheMergeSort.html提供的Python版本
(注意下面我在一个示例列表上粘贴了一个应用程序流的图像,这是为了帮助我理解递归流(因为我是nube))。你知道吗
合并函数就是问题所在,应该更像:
一般来说,您不需要为排序分配空间,只需在运行时附加到空列表中即可。对于while逻辑,您需要确保没有超出Lsort和Rsort数组的界限。确保索引小于数组长度。你知道吗
当任一数组用完时,您可以将剩余的数组项连接到排序列表中。你知道吗
相关问题 更多 >
编程相关推荐