插入排序不正确排序数组

时间:2014-03-11 17:57:34

标签: python algorithm insertion-sort insertion-order

这是我的插入排序,与书中的方式完全相同"算法简介":

def insertion_sort():
    A = [5,2,4,6,1,3]
    for j in range(1, len(A)):
        print 'j:'+str(j)
        key = A[j]
        print 'key:'+str(key)
        i=j-1
        print 'i:'+str(i)
        while i > 0 and A[i] > key:
            A[i+1] = A[i]
            i=i-1
            print 'new i: '+str(i)
        print 'swapping value: '+str(A[i]) + ' with value: '+str(A[i+1])
        print ' '
        A[i+1] = key
    print A

打印:

[5, 1, 2, 3, 4, 6]

如果让它们无序,我做错了什么?

1 个答案:

答案 0 :(得分:5)

算法简介中,他们总是假设数组从索引1开始,所以你在 1 开始range(),但是python列表是0-基于索引。这意味着您永远不会比较5 A[0]。注意5排序后的所有内容。

将你的for循环修改为 -

for j in range(0, len(A)):

和你的条件

while i >= 0 and A[i] > key:

应该做的伎俩。