插入排序(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)
结果为
这就是插入排序。
🌸🌸🌸🌸🌸🌸完结撒花!🌸🌸🌸🌸🌸🌸
如有疑问或错误,欢迎大家评论区留言指出,谢谢支持!!