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