在使用python实现mergesort出现了out of index的报错

问题遇到的现象和发生背景

刚接触编程,在使用python实现merge的时候发生out of index,自己是实在看不出来问题在哪,还望解答

问题相关代码,请勿粘贴截图

def merge(a, lo, mid, hi):
i = lo
j = mid + 1
a_temp = []
for k in range(lo, hi + 1):
if i > mid:
a_temp.append(a[j])
j += 1
elif j > hi:
a_temp.append(a[i])
i += 1
elif a[i] <= a[j]:
a_temp.append(a[i])
i += 1
else:
a_temp.append(a[j])
j += 1
a = a_temp

li = [2, 4, 5, 7, 1, 3, 6, 8]
print(li)
merge(li, 0, 3, 7)
print(li)

运行结果及报错内容

IndexError: list index out of range

我的解答思路和尝试过的方法

我用另外一种,复制原数组并更改内容的方法可以实现,代码如下:
def merge(a, aux, lo, mid, hi):
i = lo
j = mid + 1
for k in range(lo, hi + 1):
if i > mid:
aux[k] = a[j]
j += 1
elif j > hi:
aux[k] = a[i]
i += 1
elif a[i] <= a[j]:
aux[k] = a[i]
i += 1
else:
aux[k] = a[j]
j += 1

a = [2, 4, 5, 7, 1, 3, 6, 8]
aux = a.copy()
print(aux)
merge(a, aux, 0, 3, 7)
print(aux)

我想要达到的结果

请问两者的区别在哪里?为什么一个不会出现index报错呢?

a_temp = []一开始是没有元素的,你i和j自加了之后越界了
修改后:

def merge(a, lo, mid, hi):
    i = lo
    j = mid + 1
    a_temp = [2, 4, 5, 7, 1, 3, 6, 8]
    for k in range(lo, hi + 1):
        if i > mid:
            a_temp.append(a[j])
            j += 1
        elif j > hi:
            a_temp.append(a[i])
            i += 1
        elif a[i] <= a[j]:
            a_temp.append(a[i])
            i += 1
        else:
            a_temp.append(a[j])
            j += 1
            a = a_temp

li = [2, 4, 5, 7, 1, 3, 6, 8]
print(li)
merge(li, 0, 3, 7)
print(li)