算法合并排序,因为在划分列表和排序前两个值在我的情况下16和44为什么函数再次执行?



我正在学习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

相关内容

  • 没有找到相关文章

最新更新