0
点赞
收藏
分享

微信扫一扫

插入排序(Python)

生态人 2022-04-06 阅读 222
算法python

插入排序(InsertionSort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。为什么这样说呢?因为他的时间复杂度为O(n^2)

举个例子理解吧 扑克牌大家都玩过吧 插入排序和整理牌很类似,只要找到摸到的牌在手里的牌的具体位置就好喽 下面我用图示给大家演示一下

初始时手里的牌(有序区)只有一张,每次从(无序区)摸一张牌插入到手里的牌(有序区)的正确位置

 

5是手里的牌(有序区,后面的全是要摸的牌(无序区),7为下一张要摸的牌。

 摸出这张牌与手中的牌比较若比手中的牌大放到这张牌前面,7比5大放在5前面。下一张牌为4。

 4与手中的第一张牌7比较,4比7小7往前走一位,将手中的牌向后看一位看到5了,4也比5小5也向前走一位,空出一位留给4,将4插入

插入后列表为下图

 

接下来同理

 

 

 最终结果为:

 接下来我们要做的就是要用代码实现它啦


def insert_sort(lst):
'i代表摸的牌的下标'
for i in range(1,len(lst)):
temp = lst[i]
'j代表手中的牌的下标'
j=i-1
while j>=0 and temp<lst[j]: # 得保证有牌可找
lst[j+1]=lst[j] # 手中的牌往前插
j-=1 # 向后寻找比temp小的数
lst[j+1]=temp # 找到后插入比它小的牌前 或者是手中的牌都比摸到的牌大j=-1时 摸到的牌被当作第一张牌

lst=[5,7,4,6,3,1,2,9,8]
insert_sort(lst)
print(lst)

 

注意一点哦 当手中的牌找到0时 j-1=-1 代表无牌可找了,自然摸的牌要被放到lst[0]的位置上

当然,为了更好的观察这个过程可以在每次循环后print一下

def insert_sort(lst):
'i代表摸的牌的下标'
for i in range(1,len(lst)):
temp = lst[i]
'j代表手中的牌的下标'
j=i-1
while j>=0 and temp<lst[j]: # 得保证有牌可找
lst[j+1]=lst[j] # 手中的牌往前插
j-=1 # 向后寻找比temp小的数
lst[j+1]=temp # 找到后插入比它小的牌前 或者是手中的牌都比摸到的牌大j=-1时 摸到的牌被当作第一张牌
print(lst)


lst=[5,7,4,6,3,1,2,9,8]
insert_sort(lst)
print(lst)

结果为

 

这就是插入排序

举报

相关推荐

0 条评论