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

问题描述 投票:-1回答:1

任何人都知道为什么我的就地合并排序是“索引超出范围”。我在代码中找不到任何错误,对您有所帮助。

我本来的“ low”为0,但决定为每个“ low,mid,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)
python mergesort
1个回答
1
投票
  • 您的错误是在代码中,此部分的缩进不正确。它应该在while循环之外。一旦合并完成。 请参阅合并排序伪代码以查找错误所在。
© www.soinside.com 2019 - 2024. All rights reserved.