python - 无法理解 python 的归并排序
问题描述
我正在研究算法,现在我被困在合并排序代码上。据我了解,mergeSort() 函数采用一个列表并将其划分为一个子列表,直到它的长度小于两个,即只有一个元素并分配给左右变量。之后,它将这些变量传递给 merge() 函数,该函数将左右排序并将其放入新列表并返回此列表。例如,如果输入是 [4,3,2,1],那么 left=4 right=3,merge(left, right, compare) 将返回 [3,4],然后我就卡住了。请帮助我理解这个例子。谢谢。
import operator
def merge(left, right, compare):
result = []
i,j = 0, 0
while i < len(left) and j < len(right):
if compare(left[i], right[j]):
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
while (i < len(left)):
result.append(left[i])
i += 1
while (j < len(right)):
result.append(right[j])
j += 1
return result
def mergeSort(L, compare = operator.lt):
if len(L) < 2:
return L[:]
else:
middle = len(L)//2
left = mergeSort(L[:middle], compare)
right = mergeSort(L[middle:], compare)
return merge(left, right, compare)
解决方案
推荐阅读
- android - 在 SharedPreferance 中使用静态最终变量会导致内存泄漏?
- laravel - PHP / Laravel 8.0:从版本 7.25 升级后,Paginator 实例上的链接方法 UI 损坏
- mysql - Nodejs - 无法在mysql2中加载环境变量
- spring-boot - 在 SpringBoot @Scheduled 中更新 Cron 表达式运行时
- php - 通过jquery从模态窗体窗口获取复选框值的值
- cortex-m - 关于 Cortex-M3 bit-banding 功能的一些问题
- google-apps-script - 从谷歌表格创建日历事件
- python - 使用卷积来导出图像边缘上的错误结果
- flutter - 如何在没有 android studio 模拟器的情况下在 VSCode 中运行颤振应用程序
- php - 如何在php中使用firebase发送带有图像和徽章的推送通知?