6、排序Low-B三人组之插入排序(算法基础—排序算法)

1、插入排序逻辑

插入排序的过程可以类比为:打扑克牌时摸完牌后按大小插入到手里的牌这个过程。

最初有一堆无序的牌

1、先从这堆无序的牌中,抽出一张,放到手里,这是手里的第一张牌;
2、再从无序牌中摸出一张,用个变量tmp存起来,然后拿手里的牌跟tmp做对比;
3、从右往左依次拿出手里的牌跟tmp对比,如果比tmp大的,就让手里的这张牌往前移动1位;
4、重复3的操作,直到没有找到比tmp大的或者手里的牌都对比完了,就让tmp插入到这个位置

2、图文解说

在这里插入图片描述
5就是手里的第一张牌,从无序区抽出第一张是7,7和5对比,7比5大,不做任何处理,放回去;
在这里插入图片描述

这时候,手里的牌就变成5和7了。
继续从无序区抽了一张牌4,4比7大,就把7往右移一位,4比5大,5也要往右移一位。
手里的牌没得对比了,就把4插入到原来5的位置。
在这里插入图片描述
依次类推。
在这里插入图片描述
3、插入排序写法

def insert_sort(li):
    print('列表初始值:%s'%li)
    '''我们假定列表第一个元素就是手里的牌,其他都是等待被摸的牌'''
    # 从无序区摸牌,i 代表被摸的牌所处的位置
    for i in range(1, len(li)):  
    	# 先找个tmp变量把摸到的牌存起来,接下来要循环拿出手里的牌跟tmp对比
        tmp = li[i]
        # j代表手里牌的位置,最开始拿出手里牌最右边第一张,它的位置就是i-1
        j = i - 1 
        # 循环拿出手里的牌跟tmp对比
        # 如果当前手里还有牌没对比,并且手里的牌比摸到的牌大,
        # 就循环下去,否则跳出循环
        while j >= 0 and li[j] > tmp:
        	# 如果当前这张手里的牌比tmp大,就让它的位置往右移动1位
            li[j+1] = li[j]
            j -= 1      # 继续往左拿出手里的牌来对比
        li[j+1] = tmp   # 此时手里没有牌了或者手里的牌没有比tmp大的了,
        #就让tmp插入到这个位置
        print(li)

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

在这里插入图片描述
复杂度O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值