2017-02-12 77 views
1

所以我試圖教自己如何編寫合併排序,但無論出於什麼原因,我似乎無法使其工作。在Python中合併排序問題

def merge(left, right): 
     result = [] 
     i ,j = 0, 0 
     while i < len(left) and j < len(right): 
      if left[i] <= right[j]: 
       result.append(left[i]) 
       i += 1 
      else: 
       result.append(right[j]) 
       j += 1 
     result += left[i:] 
     result += right[j:] 
     return result 

    def mergesort(numlist): 
     if len(numlist) < 2: 
      return numlist 
     middle = int(len(numlist)/2) 
     left = mergesort(numlist[:middle]) 
     right = mergesort(numlist[middle:]) 
     return merge(left, right) 

每個列表我送入排序,然後嘗試打印剛剛出現的完全一樣,沒有變化

+0

你如何使用你的函數? 'print(mergesort([3,4,1,1,6,2]))'適用於我。你必須檢查返回值,而不是原始的'numlist',它不會被改變。 –

+0

mergesort(list_of_numbers)應該返回該列表,但從最小到最大排序 – BecauseImBatmanFilms

+0

我從你的確切代碼中得到''[1,2,3,4,6]'。你夠好嗎? –

回答

0

接聽所以這可以被關閉,儘管它被固定在評論與@讓 - 的幫助弗朗索瓦法布爾。

你目前的代碼工作正常,但它不就地排序列表。在整理了一個名爲list_of_numbers名單的情況,您需要將結果分配回list_of_numbers

list_of_numbers = mergesort(list_of_numbers)