插入排序
算法步骤
这个算法比较好理解,说白了,和你打扑克牌时理牌几乎是一样的
-
把第二张抽出来和第一张比较,小就放到第一张前面
-
这时前两张就已经排好序了,再将第三张抽出从后往前和前两张比较,比哪张小,就放到哪张前面
-
这时前三张就已经排好序了,再将第四张抽出从后往前和前三张比较,比哪张小,就放到哪张前面
:
:
:
如此循环往复,直到排好
图解算法
代码实现
- 原理很简单,但代码有点难写
def ins_sort(ls):
for i in range(1,len(ls)):
cur=ls[i]
j = i-1
while j>=0 and cur<ls[j]:
ls[j+1]=ls[j]
j-=1
ls[j+1]=cur
ls=[1,5,4,3,5,67,3,58,24]
ls_result=ins_sort(ls)
print(ls_result)
#[1, 3, 3, 4, 5, 5, 24, 58, 67]
- 我的理解
- cur只是一个暂时储存值的东西
- j是代表下标,在while循环中,从后往前比会用到,这也是每次循环j-1的原因,这样才能将抽出来的数插到合适的位置