2016-04-22 11 views
0

私は、ソートアルゴリズムなマージを実装hoverer私はいくつかの問題マージソートのpython 3

import sys 

if __name__ == '__main__': 
     input = sys.stdin.read() 
     data = list(map(int, input.split())) 
     n = data[0] 
     a = data[1:] 
     print(merge_sort(a)) 

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

     else: 
      result.append(rigt[j]) 
      j += 1 

    result += left[i:] 
    result += rigt[j:] 

    return result 

def merge_sort(a): 
    if len(a) <= 2: 
     return 1 

    middle = len(a)//2 

    left = a[:middle] 
    right = a[middle:] 

    left = merge_sort(left) 
    right = merge_sort(right) 

    return list(merge(left,right)) 

私は、このようなエラーはTypeErrorを得たのです私が間違っていたところで、なぜプログラムは "左"と "右"がintだと思うのか、それは配列です。

答えて

1

あなたは、パーティション対応でないリストを返すために

if len(a) == 1: 
    return a 

if len(a) <= 2: 
    return 1 

を交換する必要があります。

1

merge_sort関数の終了ケースが1であることを忘れてしまいます。したがって、leftとrigtは再帰が最下位に達したときにintであり、コード内でそれを考慮する必要があります。