刚接触编程,在使用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)