我正在学习 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
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])