python 中的简单合并排序

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

我正在学习 python 很抱歉没有用 pythonic 方式编码 我正在尝试进行合并排序,但它不起作用 我看着调试器,它似乎没有执行行

 arr1[i] = arr[s+i]
的问题,然后跳回 mergeSort 函数,我不知道为什么

def mergeSort(arr,s,e):
    if s >= e: return
    mid = s + (e-s)//2; 
    mergeSort(arr,s,mid)
    mergeSort(arr,mid+1,e)
    merge(arr,s,mid,e)


def merge(arr,s,mid,e):
        arr1 = []
        arr2 = [] 
        n = mid -s + 1
        m = e - mid
        for i in range (0,n):
            arr1[i] = arr[s+i]
        for i in range (0,m):
            arr2[i] = arr[mid + i + 1]
                
        i = 0
        j = 0
        k = s
        while i <  len(arr1) and  j < len(arr2):
            if(arr1[i] < arr2[j]):
                arr[k] = arr1[i]
                i+=1
            else:
                arr[k] = arr2[j]
                j+=1 
            k+=1
        while(i < len(arr1)):
            arr[k] = arr1[i]
            i+=1
            k+=1
        while(j < len(arr2)):
            arr[k] = arr2[j]
            j+=1
            k+=1

arr = [1,5,0,3,-15,99,1500,-1500,66,120]
mergeSort(arr,0,len(arr))
print(arr)

我得到的错误是:

line 41, in merge arr1[i] = arr[s+i]
IndexError: list assignment index out of range
python mergesort
1个回答
0
投票

with

arr1[i] = arr[s+i]
您正在尝试更新索引 i 上的值,但该值可能存在也可能不存在。如果您尝试更新不存在的内容,您会得到
IndexError: list assignment index out of range

您可以通过将其包装在 try-catch 块中来解决它:

            try:
              arr1[i] = arr[s+i]
            except:
              arr1.append(arr[s+i])
© www.soinside.com 2019 - 2024. All rights reserved.