簡體   English   中英

合並排序索引錯誤

[英]Merge Sort IndexError

這是我第一次使用 Python 實現合並排序。

unsorted_list = [7, 4, 2, 1]


def merge(left_array, right_array):
    lst = []

    # compare the element in both array
    i = 0
    while len(left_array) > 0 and len(right_array) > 0:
        if left_array[i] <= right_array[i]:
            lst.append(left_array[i])
            del left_array[i]
            i += 1
        else:
            lst.append(right_array[i])
            del right_array[i]
            i += 1

    # append the rest if one of the array is empty
    if len(left_array) > 0:
        for j in left_array:
            lst.append(j)

    if len(right_array) > 0:
        for h in right_array:
            lst.append(h)

    # return the sorted sub-list
    return lst


def merge_sort(array):
    # return the array if there is only 1 element
    if len(array) <= 1:
        return array
    
    # divide the array in 2 halves
    mid = (len(array))//2
    left = array[:mid]
    right = array[mid:]

    # recursion
    merge_sort(right)
    merge_sort(left)
    return merge(left, right)


print(merge_sort(unsorted_list))

但是控制台顯示了這個錯誤而不是排序列表:

 File "c:\Users\...\merge_sort.py", line 64, in <module>
    print(merge_sort(unsorted_list))
  File "c:\Users\...\merge_sort.py", line 62, in merge_sort
    return merge(left, right)
  File "c:\Users\...\merge_sort.py", line 28, in merge
    if left_array[i] <= right_array[i]:
IndexError: list index out of range

我希望結果應該是這樣或類似的:

[1, 2, 4, 7]

i從 0 開始並且如果一個數組(即 right_array 和 left_array 變空)它停止添加,i 不應該大於數組的最大索引。

我不知道如何解決我的錯誤。 如何糾正它?

刪除 i+=1 的 2 行。 並將 i 替換為 0。

在您當前的代碼中,當您從列表中刪除 num 時,您將 i 增加 1。然后實際上錯過了左右 arrays 中的一些數字。

例如:在列表中(變量名稱為 arr)有 2 個數字,如下 [1,2]。 如果刪除 1,則新列表為 [2]。 當您調用 arr[1].Now 它返回 indexError 因為現在列表中沒有 2 個 nums。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM