我正在学习python中归并排序算法背后的逻辑。在对列表进行除法并对前两个值排序(在我的例子中是16和44)之后,为什么要再次执行该函数?
这是代码:
def MergeSort(list):
if len(list)>1:
mid = len(list)//2 #splits list in half
left = list[:mid]
right = list[mid:]
MergeSort(left) #repeats until length of each list is 1
MergeSort(right)
a = 0
b = 0
c = 0
while a < len(left) and b < len(right):
if left[a] < right[b]:
list[c]=left[a]
a = a + 1
else:
list[c]=right[b]
b = b + 1
c = c + 1
while a < len(left):
list[c]=left[a]
a = a + 1
c = c + 1
while b < len(right):
list[c]=right[b]
b = b + 1
c = c + 1
return list
根据我的逻辑,一旦我到达函数的末尾,因为没有循环,我应该退出函数,然而(它应该是)其他两个值也被分析和排序。
代码似乎运行良好。不需要return list
,因为MergeSort正在修改原始列表。
,然而(正如它应该的)其他两个值也被分析和排序
代码似乎工作正常。不需要return list
,因为MergeSort正在修改原始列表。
和(应该是)其他两个值??也进行了分析和排序
函数MergeSort调用自己两次:
MergeSort(left)
MergeSort(right)
顺序为深度优先,左边优先。直到只有2个元素需要合并时才会进行合并:1个在左边[44],1个在右边[16],合并后生成[16,44]。之后,它返回对[83,7]调用MergeSort(右),合并生成[7,83]。然后返回到先前的嵌套层,将[16,44]与[7,83]合并。显示操作顺序:
44 16 83 7
44 16
44
16
16 44
83 7
83
7
7 83
7 16 44 83