插入排序:Python实现(低级排序法)

插入排序:Python实现(低级排序法)

维基百科:
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1) 的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
复杂度:
最坏时间复杂度:O(n^2)
最优时间复杂度:O(n)
平均时间复杂度:O(n^2)
概述
插入排序和打牌类似:初始时手里(有序区)只有一张牌,每次(从无序区)摸一张牌,插入到手里已有的正确位置
e.g.
li = [6,5,3,1,8,7,2,4]
原本你手里有一张牌6,然后你去抓牌5,把抓的牌5与牌6 比较交换,然后继续抓,然后再把抓的牌与之前拥有的牌比较交换……
看图看图^^
在这里插入图片描述
不啰嗦,上代码

def insert_sort(li):
    for i in range(1,len(li)):
        tmp = li[i]#定义一个tmp为你抓的牌
        j = i-1#j是你手中的牌的最大索引
        while j >= 0 and li[j] > tmp:#让你抓的牌和你手中的牌比较(从你手中的牌最大索引开始比较),
            li[j],li[j+1] = li[j+1],li[j]#抓的牌和手中的牌交换
            j-=1#依次与你手中已经拥有的牌进行比较
    return li
li = []
s = input('请输入您要排序的数据(数字之间用,分隔开):')
l = s.split(",")
for i in l:
    j = int(i)
    li.append(j)
print(f'您要排序的列表是{li}')
new_li = insert_sort(li)
print(f'插入排序完成后的列表是{new_li}')
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页