簡體   English   中英

Python遞歸合並排序不起作用

[英]Python Recursive Merge Sort Not Working

我正在嘗試實現一個遞歸合並排序算法,只有函數返回什么,但我很難讓它工作。 似乎它正在分解列表並正確地對它們進行排序,但是沒有將這些已排序的列表轉移到下一個遞歸調用中。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM