gpt4 book ai didi

Python递归合并排序不起作用

转载 作者:太空狗 更新时间:2023-10-30 01:28:29 24 4
gpt4 key购买 nike

我正在尝试使用仅不返回任何内容的函数来实现递归合并排序算法,但我很难让它工作。它似乎正在分解列表并正确排序它们,但没有将这些排序后的列表转移到下一个递归调用中。

def merge(list1, list2):
result = []
i = 0
j = 0
k = 0
while i < len(list1) and j < len(list2):
if list1[i] < list2[j]:
result.append(list1[i])
i+=1
else:
result.append(list2[j])
j+=1
k+=1
while i < len(list1):
result.append(list1[i])
i+=1
k+=1
while j < len(list2):
result.append(list2[j])
j+=1
k+=1
print(result)


def merge_sort(inplist):
if int(len(inplist)) >1:
mid = len(inplist)//2
left = inplist[0:mid]
right = inplist[mid:]
merge_sort(left)
merge_sort(right)
merge(left,right)


test = [1,4,7,2,6,9,8,5,3,0]
merge_sort(test)
print(test)

最佳答案

索引列表会创建一个新列表 (left = inplist[0:mid])。由于您似乎没有将这些新列表(合并后)重新分配给 inplist,因此 inplist 不会发生任何事情。

事实上,merge() 合并了两个列表,但随后丢弃了结果:您在 merge() 中创建了 result,但是你不对它做任何事情,所以它会在函数退出后被丢弃。

我想你需要从 merge() 返回 result 并将其分配给 inplist;类似(未经测试)的东西:

inplist[:] = merge(left, right)

关于Python递归合并排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com