簡體   English   中英

Python 就地合並排序錯誤:索引超出范圍

[英]Python in-place merge sort error: index out of range

有誰知道為什么我的就地合並排序是“索引超出范圍”

我最初的“低”為 0,但決定為每個“低、中、高”做一個 +1 以補償索引空間。 任何人都可以找到任何東西嗎? 謝謝。

def merge(array, low, mid, high):

    i,j,k = low,mid+1,low
    leftarray = array[low:mid+1]
    rightarray = array[mid+1:high+1]

    temp= [0]*high

    while i<=mid and j<=high:

        if array[i]<array[j]:
            temp[k] = array[i]
            i+=1
        else:
            temp[k] = array[j]
            j+=1
        k+=1

    if i>mid:
        temp[k:high+1] = array[j:high+1]
    else:
        temp[k:high+1] = array[i:mid+1]  

    array[low:high+1] = temp[low:high+1]

    def inplace(array,low,high):

        if low<high:
            mid = int((low+high)/2)
            inplace(array,low,mid)
            inplace(array,mid+1,high)
            merge_test(array,low,mid,high)


    array = [20,30,21,15,42,45,31,0,9]
    inplace(array, 0, len(array)-1)
    print(array)
  • 您遇到的錯誤是在您的代碼中,這部分的縮進不正確。 它應該在while循環之外。 一旦合並完成。 請參閱合並排序偽代碼以查找錯誤所在。
if i>mid:
    temp[k:high+1] = array[j:high+1]
else:
    temp[k:high+1] = array[i:mid+1]  

array[low:high+1] = temp[low:high+1]
  • 以下代碼正在運行。
def merge_test(array, low, mid, high):

    i,j,k = low,mid+1,low
    leftarray = array[low:mid+1]
    rightarray = array[mid+1:high+1]

    temp= [0]*high

    while i<=mid and j<=high:

        if array[i]<array[j]:
            temp[k] = array[i]
            i+=1
        else:
            temp[k] = array[j]
            j+=1
        k+=1


    if i>mid:
        temp[k:high+1] = array[j:high+1]
    else:
        temp[k:high+1] = array[i:mid+1]  

    array[low:high+1] = temp[low:high+1]


def inplace(array,low,high):

    if low<high:
        mid = int((low+high)/2)
        inplace(array,low,mid)
        inplace(array,mid+1,high)
        merge_test(array,low,mid,high)


array = [20,30,21,15,42,45,31,0,9]
inplace(array, 0, len(array)-1)
print(array)

output

[0, 9, 15, 20, 21, 30, 31, 42, 45]

PS:請始終發布完整的錯誤堆棧跟蹤。 它有助於調試代碼。 您還應該嘗試閱讀堆棧跟蹤。

暫無
暫無

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

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