簡體   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