2016-04-22 185 views
0

我實現這樣的合併排序算法,hoverer我得到了一些問題歸併排序蟒蛇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)) 

我得到了這樣的錯誤類型錯誤:類型「詮釋」的對象沒有LEN() 我無法理解,我錯了,爲什麼程序認爲「左」和「右」是int,但它是數組。

回答

1

你應該

if len(a) == 1: 
    return a 

更換

if len(a) <= 2: 
    return 1 

返回一個列表是不分區。

1

您忘記了您的merge_sort函數的終止情況,它會返回1.因此,當遞歸到達底部時,left和rigt是int,您需要考慮代碼中的那個。