5
我想实现一个递归合并排序算法,只有函数返回任何东西,但我很难得到它的工作。好像它正在分解列表并正确排序它们,但没有将这些已排序的列表转移到下一个递归调用中。Python递归合并排序不工作
def merge(list1, list2):
result = []
i = 0
j = 0
k = 0
while i < len(list1) and j < len(list2):
if list1[i] < list2[j]:
result.append(list1[i])
i+=1
else:
result.append(list2[j])
j+=1
k+=1
while i < len(list1):
result.append(list1[i])
i+=1
k+=1
while j < len(list2):
result.append(list2[j])
j+=1
k+=1
print(result)
def merge_sort(inplist):
if int(len(inplist)) >1:
mid = len(inplist)//2
left = inplist[0:mid]
right = inplist[mid:]
merge_sort(left)
merge_sort(right)
merge(left,right)
test = [1,4,7,2,6,9,8,5,3,0]
merge_sort(test)
print(test)
merge_sort是一个递归函数,是否会正确地从第二或第三级递归值中继承? –
@AnandSKumar我想这取决于你如何设置它,但我认为这应该工作,是的。主要是因为你将最终结果再次分配给原始列表;任何中间列表可以是对原始列表(的部分)的复制或引用,但是在那一点上不再重要。当然,从内存使用的意义上讲它确实很重要;在这种情况下,你总是需要传递完整的列表,加上相关的开始和结束索引(很像C中的一样)。 – Evert