我试图递归地对列表元素进行分区(如在分而治之中),因此打印切片的元素,但突然看到意外的异常(在输出的第6行及以后)。
def Mergesort(a, l, r):
if(l<r):
mid = (r+l+1) // 2
print(a)
Mergesort(a[l : mid], l, mid-1)
Mergesort(a[mid : r+1], mid, r)
a = [8, 3, -2, 6, 7, 4, 1, 2, -1, 0, 9, 12, 11, 5]
Mergesort(a, 0, len(a)-1)
输出:
[8, 3, -2, 6, 7, 4, 1, 2, -1, 0, 9, 12, 11, 5]
[8, 3, -2, 6, 7, 4, 1]
[8, 3, -2]
[3, -2]
[6, 7, 4, 1]
[1]
[]
[2, -1, 0, 9, 12, 11, 5]
[]
[]
[]
[]
[]
这是因为l, r
中的def Mergesort
不精确。当您合并RHS数组a=[2, -1, 0, 9, 12, 11, 5]
时,它实际上正在运行:Mergesort([2, -1, 0, 9, 12, 11, 5],7,10)
,而不是Mergesort([2, -1, 0, 9, 12, 11, 5],0,3)
。由于len(a)= 7,它将仅返回一个空数组[]
。我修改了代码: