【希尔排序】(python)

本文介绍了希尔排序,一种基于插入排序的改进算法,通过逐步减小间隔(gap)实现列表的快速排序。通过分组和调整元素位置,希尔排序在一定程度上提高了排序效率。示例代码展示了如何用Python实现希尔排序并打乱后进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是希尔排序?

9个元素的列表,整除2得到4

d为4时,每隔四个元素分为一组,一共四组

然后进行一次插入排序,这里仅展示结果没有列出详细的过程

接下来再把d整除2

d为2时,把元素分为2组,每隔两个元素分组

每组再进行一次插入排序(下面一组已经有序所以没有变化)

d再整除2,此时d为1,相当于直接进行一次插入排序

希尔排序可以直接引用插入排序的代码,插入排序是拿第一个元素一个一个比较,希尔排序是每组的元素同时比较,如下所示:

完整代码:

import random

def insert_sort(li,gap):
    for i in range(gap,len(li)): # i表示摸到的牌的下标
        tmp = li[i]
        j = i-gap # j表示手里牌的下标
        while j >= 0 and li[j]>=tmp:
            li[j+gap]=li[j]
            j -= gap
        li[j+gap]=tmp

def shell_sort(li):
    d = len(li) // 2
    while d >= 1:
        insert_sort(li,d)
        d //= 2

li = list(range(1000))
random.shuffle(li)
shell_sort(li)
print(li)

range函数生成1000个随机数,shuffle方法打乱顺序

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值