python 希尔排序

算法思想

1、希尔排序是对直接插入排序的改善

希尔排序是对直接插入排序的改善,由于在最好的情况下(原序列接近有序的情况),直接插入排序的时间复杂度是O(n),因此希尔排序试图通过将原待排序序列分解为更小的序列,对每个子序列先进行插入排序,这将使整个原始序列更加趋于有序状态,从而使得对整体序列进行插入排序时变得高效。

2、具体实施步骤

首先设置元素间隔gap,通常是len(lists)//2,其中lists是待排序序列,//是地板除法,以长度为10的序列lists=[6,8,9,52,8,666,0,1,5,8]为例:

gap=len(lists)//2=5
因此,lists将被分为5组,分别为[6,666],[8,0],[9,1],[52,5],[8,8]
接下来是分别对以上5组进行直接插入排序
排序完毕,合并成长度为10的序列是[6,0,1,5,8,666,8,9,52,8]
至此,gap=5时的排序结束

接下来,gap=gap//2=2,重复以上步骤,直至gap=1,此时对整体序列进行插入排序即可

python实现

#希尔排序:
def shell_sort(lists):
    gap=len(lists)//2
    while gap>=1:
        for i in range(gap,len(lists)):
            key=lists[i]
            j=i-gap
            while j>=0:
                if lists[j]>key:
                    lists[j+gap]=lists[j]
                    lists[j]=key
                j-=gap
        gap//=2
lists=[1,5,6,9,8,2,6,52,1314,8,0,520,888,666]
shell_sort(lists)
print(lists)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值