2015-03-31 86 views
1

我试图让这种合并排序算法工作,我完全难住为什么它不会。合并功能似乎工作正常,但排序功能似乎不起作用。我在网上搜索了一个解决方案,但我似乎无法找出我做错了什么。我应该提到,我对python和编码通常很陌生,所以任何帮助将不胜感激。在Python代码提供如下:合并排序Python - 排序功能的问题

def sort(sorted_list): 
    if len(sorted_list) <= 1: 
     return sorted_list 

    middle = len(sorted_list) // 2 
    left = sorted_list[:middle] 
    right = sorted_list[middle:] 
    left = sort(left) 
    right = sort(right) 
    return sorted_list(merge(left, right)) 

def merge(a_list, b_list): 
    combined_list = [] 
    index_a = 0 
    index_b = 0 
    length_a = len(a_list) 
    length_b = len(b_list) 

    while index_a < length_a or index_b < length_b: 
     if index_a < length_a and index_b < length_b: 
      if a_list[index_b] <= b_list[index_b]: 
       combined_list += [a_list[index_a]] 
       index_a = index_a + 1 
      else: 
       combined_list += [b_list[index_b]] 
       index_b = index_b + 1 
     elif index_a < length_a: 
      combined_list += [a_list[index_a]] 
      index_a = index_a +1 
     else: 
      combined_list += [b_list[index_b]] 
      index_b = index_b + 1 
    return combined_list 
+0

您可能收到一条错误消息,指出'list'对象不可调用',指向'return sorted_list(merge(left,right))'。看看那条线。是否有意义? – user2357112 2015-03-31 01:37:01

回答

1

这里是出了什么问题:

return sorted_list(merge(left, right))

它应该是:

return merge(left, right)

而且,不相关的错误,但这一行应该纠正:

if a_list[index_b] <= b_list[index_b]:

到: if a_list[index_a] <= b_list[index_b]:

+0

谢谢!如果我现在可以吻你,我会的。 – prance 2015-03-31 02:18:51

+0

哈哈,没问题。乐于帮助 – Mike49 2015-03-31 02:21:21

0

我做了一些修正你的程序。这是固定的程序。

def sort(sorted_list): 
    if len(sorted_list) <= 1: 
     return sorted_list 

    middle = len(sorted_list) // 2 
    left = sorted_list[:middle] 
    right = sorted_list[middle:] 

    left = sort(left) 
    right = sort(right) 
    return merge(left, right) 

def merge(a_list, b_list): 
    combined_list = [] 
    index_a = 0 
    index_b = 0 
    length_a = len(a_list) 
    length_b = len(b_list) 

    while index_a < length_a and index_b < length_b: 

     if a_list[index_a] <= b_list[index_b]: 
      combined_list.append(a_list[index_a]) 
      index_a = index_a + 1 
     else: 
      combined_list.append(b_list[index_b]) 
      index_b = index_b + 1 

    while index_a < length_a: 
     combined_list.append(a_list[index_a]) 
     index_a = index_a + 1 
    while index_b < length_b: 
     combined_list.append(b_list[index_b]) 
     index_b = index_b + 1 
    return combined_list 

print sort([5,1,2])