Python递归合并排序不起作用

Est*_*n D 5 python sorting recursion merge list

我正在尝试实现一个递归合并排序算法,只有函数返回什么,但我很难让它工作.似乎它正在分解列表并正确地对它们进行排序,但是没有将这些已排序的列表转移到下一个递归调用中.

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)
Run Code Online (Sandbox Code Playgroud)

小智 2

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

事实上,merge()合并两个列表,但随后丢弃结果:您在resultinside 中创建merge(),但没有对它执行任何操作,因此在函数退出后它将被丢弃。

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

inplist[:] = merge(left, right)
Run Code Online (Sandbox Code Playgroud)