麻省理工学院算法简介将插入排序描述为:
我用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/