为什么插入排序中的最后一个数字会更改为该列表中的最后一个数字?

时间:2017-10-02 04:18:34

标签: python-3.x

在这张图片中,您可以看到代码正在使用 if A[j] > curNum: A[j+1] = A[j],然后将数字更改为11,而实际上代码应该做一些不同的事情,我疯了吗?

2 个答案:

答案 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