2016-04-22 91 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,您需要考虑代码中的那个。