【发布时间】:2015-05-24 15:51:18
【问题描述】:
ab = [5, 89, 23, 9]
def mergsort(array):
mid = len(array) / 2
if mid > 0:
print (array)
mergsort(array[:mid])
mergsort(array[mid:])
print(array)
merg(array)
return array
def merg(array):
print (array)
mid = len(array)//2
left = array[:mid]
right = array[mid:]
i = j = k = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
array[k] = left[i]
i+=1
else:
array[k] = right[j]
j+=1
k+=1
while i < len(left):
array[k]=left[i]
i+=1
k+=1
while j < len(right):
array[k] = right[j]
j+=1
k+=1
print (array)
mergsort(ab)
print (ab)
merge 函数对给定的数组进行排序并更新数组。但在下一次递归中,进入merg 函数的数组不是变异数组。
在示例中,首先进行排序,[5,89] 和 [23,9] 被排序为 [5,89] 和 [9,23],但下一次递归中的合并输入是 [5,89,23,9] 而不是 [5,89,9,23]。
我找不到任何原因,因为改变数组会影响父数组。
【问题讨论】:
标签: python sorting recursion merge