Python就地合并排序错误:索引超出范围

Python就地合并排序错误:索引超出范围,python,mergesort,Python,Mergesort,有人知道为什么我的就地合并排序是“索引超出范围” 我最初的“low”值为0,但决定为每个“low、mid、high”值加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<=

有人知道为什么我的就地合并排序是“索引超出范围”

我最初的“low”值为0,但决定为每个“low、mid、high”值加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)
def合并(阵列、低、中、高):
i、 j,k=低,中+1,低
leftarray=阵列[低:中+1]
rightarray=阵列[中+1:高+1]
温度=[0]*高
而我
  • 您的错误在于代码中此部分缩进不正确。它应该在while循环之外。一旦合并完成请参阅合并排序伪代码以查找错误所在。
  • 下面的代码正在运行

PS:请始终发布完整的错误堆栈跟踪。它有助于调试代码。您还应该尝试读取堆栈跟踪。

您让我们猜测错误在哪里。请编辑问题以包含完整的错误回溯消息。
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)
[0, 9, 15, 20, 21, 30, 31, 42, 45]