簡體   English   中英

用Python表示合並排序,如何避免IndexError

[英]using Python to represent merge-sort,how to avoid a IndexError

我知道這是不正確的,而且我找到了另一種沒有無限數的方法 ,但是我仍然想知道是否可以使用無限數來糾正它。

def MergeSort(A):
    if len(A) > 1:
        mid = len(A) / 2
        left = A[0:mid]
        right = A[mid:]

        MergeSort(left)
        MergeSort(right)

        w = float("inf")
        left.append(w)
        right.append(w)
        i,j = 0,0
        for k in range(len(A)):
            if left[i] <= right[j]:
                A[k] = left[i]
                i += 1
            else:
                A[k] = right[j]
                j += 1  

問題for k in range(len(A)):for k in range(len(A)): 當您用盡left所有值但right剩余的值時會發生什么(反之亦然)?

鏈接方法添加了一個測試,基本上看起來像

if (left still has values) and ((right has no values) or (next_left < next_right)):
    take a value from left

上面的代碼將添加一個保護值,以確保如果您位於左側保護值上,則可以確保該值大於任何非保護右側值(反之亦然)。 這是正確的,直到for循環停止為止,左右各只包含防護值。

另一種選擇, 因為這里看到的 ,是循環,直到左或右耗盡,然后紛紛跟進循環收集剩余值。

暫無
暫無

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

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