【发布时间】:2020-03-31 07:10:53
【问题描述】:
def merge_sort(items):
if len(items) <= 1:
return items
middle_index = len(items) // 2
left_split = items[:middle_index]
right_split = items[middle_index:]
left_sorted = merge_sort(left_split)
right_sorted = merge_sort(right_split)
return merge(left_sorted, right_sorted)
def merge(left, right):
result = []
while (left and right):
if left[0] < right[0]:
result.append(left[0])
left.pop(0)
else:
result.append(right[0])
right.pop(0)
if left:
result += left
if right:
result += right
return result
unordered_list1 = [356, 746, 264, 569, 949, 895, 125, 455]
ordered_list1 = merge_sort(unordered_list1)
我知道当函数merge_sort()第一次被调用时,它会递归地调用自身,直到只剩下单个元素,然后在返回时将再次调用merge()函数,该函数将返回一个有序的子列表,但是函数merge_sort如何() 调用自身移动到下一个元素?我尝试可视化代码,但当return merge(left_sorted, right_sorted) 语句再次运行merge_sort() 时卡住了。
谁能解释一下return merge(left_sorted, right_sorted)在第一次返回有序子列表后如何再次调用merge_sort()。
【问题讨论】:
-
当它一直到最后一个元素并且函数总是返回一个排序数组时,就会发生魔法。这可能会有所帮助youtube.com/watch?v=JSceec-wEyw
标签: python-3.x algorithm sorting mergesort