繁体   English   中英

合并排序Python-排序功能问题

[英]Merge Sort Python - Problems with sort function

我正在尝试使此合并排序算法正常工作,而我对为什么它不会完全感到困惑。 合并功能似乎工作正常,但排序功能似乎无效。 我在网上搜寻解决方案,但似乎找不到我做错了什么。 我应该提到的是,我一般对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

这是怎么了:

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]:

我已经对您的程序进行了一些修复。 这是固定程序。

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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM