python-3.x - 合并函数如何调用merge_sort函数?
问题描述
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)
我尝试可视化代码,但是当语句再次进入 run时卡住了merge_sort()
。
谁能解释一下如何在第一次返回有序子列表后return merge(left_sorted, right_sorted)
再次调用。merge_sort()
解决方案
谁能解释第一次返回有序子列表后如何
merge(left_sorted, right_sorted)
再次调用。merge_sort()
merge
不调用merge_sort()
,它将两个排序的子列表合并为一个排序列表。
仅merge_sort()
递归调用自身,将其列表参数拆分为左右部分,直到它减少为单个元素。每组递归调用之后是一个合并阶段,其中排序的子列表被合并到一个返回给其调用者的排序子列表中......
推荐阅读
- excel - 将某些单元格从更改数量的工作表复制到新行
- javascript - Discord 如何在所有平台上运行?
- twitter - Discord Bot:仅发布包含关键字的推文
- java - 检查输入字符串是否包含标点符号字符串中的任何标点符号的有效方法
- c++ - 类 C++ 中数组元素的 Getter 和 Setter
- android - 为什么我的标签在 Xamarin 表单中的框架内不可见?
- vaadin - 如何通过环境变量或配置文件在 JxBrowser 中禁用 GPU 加速?
- r - 如何根据另一个栅格网格单元值对栅格进行子集化(分类)?
- odoo-11 - ModuleNotFoundError:没有名为“odoo.exceptions”的模块
- r - 以动态列名作为变量的数据框切片