在这张图片中,您可以看到代码正在使用
if A[j] > curNum: A[j+1] = A[j]
,然后将数字更改为11,而实际上代码应该做一些不同的事情,我疯了吗?
答案 0 :(得分:1)
在python中,列表中的否定索引意味着您从结尾而不是从头开始计算。例如,-1是最后一项,-2是最后一项。
发生了什么,j是-1,所以当程序执行该行时,
A[j+1] = A[j]
正在做
A[0] = A[-1]
因为它在索引为负数时会回绕,所以它会抓取列表中的最后一项,即11,因此
A[0] = 11
答案 1 :(得分:0)
else
后 第10行,无需编写A[j+1] = curNum
,因为A[k+1] = curNum
行正在指定所需位置的值。您将从here获得有关负指数的描述。
请查看Wikipedia link的插入排序算法。在这里我只是复制粘贴算法。
function insertionSortR(array A, int n)
if n>0
insertionSortR(A,n-1)
x ← A[n]
j ← n-1
while j >= 0 and A[j] > x
A[j+1] ← A[j]
j ← j-1
end while
A[j+1] ← x
end if
end function
插入排序的实现就像那样
def insertionSortR(A):
for i in range(1,len(A)):
temp = A[j]
j = i
while j > 0 and temp < A[j-1]:
A[j] = A[j-1]
j=j-1
A[j] = temp
return A
有关更多实施和讨论,请查看here