Python 插入排序

python 插入排序

把第一个数固定,然后将其它数插入,小的放前面。备份这个后续插入的数,然后将这个数和前面的数作比较,比前面的数小,就将前面的数后移。这样相当于前面的数就挪出一个空,如果再往前没有比它小的了,就把开始备份好的数填进去。

插入排序,稳定,平均和复杂都是 O(n2) O ( n 2 )

def insert_sort(L):
    for i in range(1, len(L)):
        # 第1个数,index=0,单独拿出来
        v = L[i]
        j = i
        while j>=1 and L[j-1]>v:
            # j大于等于1,查看前一个数
            # 只要前面的数L[j-1]大于k,就往后移
            L[j] = L[j-1]
            j -= 1
        L[j] = v    
def insert_sort(L):
    for i in range(1, len(L)):
        v = L[i]
        j = i - 1
        while j>=0 and L[j]>v:
            # 大于等于0,当前数进行比较
            L[j+1] = L[j]
            j -= 1
        # 比较完成,j=-1 
        L[j+1] = v  

希尔排序:

因为插入排序适合比较有序的数列,所以可以提前大步子的排好序
先生成序列,按照k = 1+3k,从大到1;
然后进行插入排序,不稳定,平均复杂度 O(nd) O ( n d ) ,在这里d=1.5;最坏 O(n2) O ( n 2 )

def insert_sort(L, g):
    for i in range(g, len(L)):
        v = L[i]
        j = i - g
        while j>=0 and L[j]>v:
            L[j+g] = L[j]
            j -= g
        L[j+g] = v  

def shell_sort(L):
    gg = [1+3*k for k in range(len(L)) if 1+3*k < len(L)]
    # 反序
    gg.reverse()
    for g in gg:
        insert_sort(L, g)

补充一个排序,不知道算不算插入排序,有点冒泡的味道

def insert_sort(L):
    for i in range(1, len(L)):
        j = i
        while j>=1 and L[j]<L[j-1]:
            # 只要后面比前面的小,就交换
            L[j], L[j-1] = L[j-1], L[j]
            j -= 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值