我正在尝试实现递归合并排序算法,其中只有函数不会返回任何内容,但我很难让它工作。似乎它正在分解列表并对它们进行正确排序,但是没有将这些已排序的列表转移到下一个递归调用中。
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)
答案 0 :(得分:2)
为列表编制索引会创建一个新列表(left = inplist[0:mid]
)。由于您似乎没有将这些新列表(合并后)重新分配到inplist,因此inplist
不会发生任何事情。
事实上,merge()
合并了两个列表,但随后丢弃了结果:您在result
内创建了merge()
,但是您没有对它做任何事情,所以它会在函数退出后被丢弃。
我猜您需要从result
返回merge()
并将其分配给inplist
;像(未经测试的):
inplist[:] = merge(left, right)