【问题标题】:insertion sort does not order array correctly插入排序未正确排序数组
【发布时间】:2014-03-11 17:57:34
【问题描述】:

这是我的插入排序,和“算法简介”一书中的完全一样:

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]

我做错了什么让它们出现故障?

【问题讨论】:

    标签: python algorithm insertion-sort insertion-order


    【解决方案1】:

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

    将你的 for 循环修改为 -

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

    和你的while条件

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

    应该做的伎俩。

    【讨论】: