这是我的插入排序,与书中的方式完全相同"算法简介":
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]
如果让它们无序,我做错了什么?
答案 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:
应该做的伎俩。