python - 在 Python 中实现合并排序时遇到问题
问题描述
假设:数组的长度是 2 的幂(这里 2^3 = 16)
这是我正在使用的代码”
def merge_sort(arr):
length = len(arr)
if length <= 1:
return arr
else:
mid = int(length/2)
L, R = merge_sort(arr[:mid]), merge_sort(arr[mid:])
return merge(L,R)
def merge(L,R):
result = []
low, high = 0, 2*max(len(L),len(R))
i = j = 0
for k in range(low,high):
if L[i] < R[j]:
result.append(L[i])
i = i + 1
else:
result.append(R[j])
j = j + 1
return result
>arr = [2, 40, 0, 66, 30, 33, 27, 69, 31, 82, 53, 26, 11, 29, 50, 59]
>merge_sort(arr)
IndexError: list index out of range
merge_sort 函数应该返回数组前半部分和后半部分的排序版本,而不是返回数组第一个元素的列表。不知道我做错了什么,请帮忙!
解决方案
当数组“L”中的所有元素合并时,索引i
尝试访问“超出范围”。
我将您的代码修复如下:
def merge(L, R):
result = []
i = j = 0
lenL, lenR = len(L), len(R)
while i < lenL or j < lenR:
if j >= lenR or (i < lenL and L[i] < R[j]):
result.append(L[i])
i = i + 1
else:
result.append(R[j])
j = j + 1
return result
它运作良好。
推荐阅读
- php - 如果给出了每周该科目的时间表,我如何生成一个日期数组,其中该科目将在课堂上进行
- nestjs - 更新后无法启动嵌套项目/停止在 Typeorm 依赖项初始化
- windows - Objcopy 获取目标文件 64 位二进制文件
- python - 添加到数据库时时间值略有下降
- r - 在 R 中,如何在主题模型中编写数据函数?
- python - 努力理解 Python 需要虚拟环境的原因
- c - 从 double 中提取指数作为无符号值
- java - 我正在通过 Youtube 教程创建地图搜索应用程序,但我的应用程序崩溃了
- python - 如何使用 ID 引用画布旋转
- unity3d - unity3d 有没有办法一次只播放一个音频源?