麻省理工学院算法简介将插入排序描述为:
algorithm - 插入排序-读MIT介绍到Algos时遇到麻烦-LMLPHP
我用python写的是:

def sort(A):
    for j in range(1, len(A)):
        key = A[j];
        i = j - 1;

        # i > 0 should be i >= 0
        while i > 0 and A[i] > key:
            A[i + 1] = A[i]
            i = i - 1;
        A[i + 1] = key

    return A

然而,这行代码引入了一个错误——前两个键位于错误的位置将此更改为while i > 0可解决此问题。
为什么麻省理工学院的介绍书里没有这个?我读错了吗?

最佳答案

书中的算法假定索引从1到A.length,包含,这就是为什么它以2的索引开始。Python的数组索引从0到len(A) - 1。您在range中对此进行了更正,但在循环测试中忽略了对其进行更正。这样做可以解决问题。

关于algorithm - 插入排序-读MIT介绍到Algos时遇到麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40009603/

10-11 15:46