【发布时间】:2022-11-30 14:00:27
【问题描述】:
我正在写一个带递归的合并排序,但它没有打印出正确的消息,但是当我手写代码时,它似乎是正确的。谁能帮我找出原因?
def mergeSort1(arr):
if len(arr)<=1: #base case
return arr
else :
breakN =len(arr)//2
left = arr[:breakN]
right = arr[breakN:]
mergeSort1(left)
mergeSort1(right)
i=j=0
temp = []
while i<len(left) and j<len(right):
if left[i] <= right[j]:
temp.append(left[i])
i += 1
else:
temp.append(right[j])
j += 1
while i < len(left): # extend the list in case there's any missing
temp.append(left[i])
i += 1
while j < len(right):
temp.append(right[j])
j += 1
#print(temp)
return temp
获取结果的代码:
arr = [9,7,3,6,2]
mergeSort1(arr)
print(arr)
结果:
[9, 7, 3, 6, 2]
后来看了看别人的代码,发现问题可能出在temp[],于是在else语句的后面加了一个print(temp)(见上面代码),打印出来如下:
[7, 9]
[2, 6]
[3, 6, 2]
[3, 6, 2, 9, 7]
它显示第一个和第二个答案是我想要的,有人可以帮我找出原因吗?
【问题讨论】:
标签: python recursion data-structures mergesort