[英]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.