代码:
def InsertionSort(l): # 插入排序
process = str(l)
for j in range(1, len(l)):
n = l.pop(j)
for i in range(j):
if l[j - i - 1] < n:
l.insert(j - i, n)
process += ("\n" + str(l))
continue
if l[0] > n:
l.insert(0, n)
process += ("\n" + str(l))
continue
return process
print(InsertionSort([3, 2, 5, 4, 1]))
输出结果:
[3, 2, 5, 4, 1]
[2, 3, 5, 4, 1]
[2, 3, 5, 4, 1]
[2, 5, 3, 5, 4, 1]
[2, 5, 3, 5, 4, 1]
[2, 5, 5, 3, 5, 4, 1]
[2, 5, 5, 3, 5, 4, 1]
[2, 5, 5, 5, 3, 5, 4, 1]
怎么看也没用看出错误啊,求解答
def InsertionSort(l): # 插入排序
process = str(l)
for j in range(1, len(l)):
n = l[j]
for i in range(j-1,-1,-1):
if l[i] <= n:
print("j: %s,i: %s, result:%s"%(j,i,str(l)))
continue
else:
l[i],l[j]=n,l[i]
n=l[i]
print("j: %s,i: %s, result:%s"%(j,i,str(l)))
return process
print(InsertionSort([3, 2, 5, 4, 1]))
#这个是我手机敲的,有缩进问题还是原谅,大致思路就是这样的
插入排序,并不是让你就真正的执行insert,你这样做,列表的遍历就会有问题
楼上已经说完了,我只是吐个槽:
想实现什么算法,先看懂算法,再去实现,不要望文生义
就算你真的要执行insert,好歹同时得del一项吧,要不不越来越多?