栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352294.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号