2017-02-12 1 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,1,2,3,4,6]'を取得します。あなたには十分ですか? –

答えて

0

とまったく同じに来るだけで印刷しようフランソワ・ファーブル。

現在のコードはうまく動作しますが、リストをインプレースでソートすることはありません。 list_of_numbersと呼ばれるリストをソートする場合は、あなたが戻っlist_of_numbersに結果を代入する必要があります。

list_of_numbers = mergesort(list_of_numbers)