9种排序算法---希尔排序算法

        希尔排序算法数插入排序算法进阶改版而来,希尔排序减少了插入排序种移动数据的次数,加快了排序进程

        希尔排序的基本思路:(1)把原始数据按照特定距离分为几个数列,然后分别对这几个数列排序;(2)然后排序后的数据再减小特定间隔距离,重复第一步,直到排序完成

具体代码如下:

def shell_sort(data):
    n=len(data)
    step = n // 2
    while step >= 1:
        for i in range(step,n):
            while i - step >= 0 and data[i] < data[i - step]:
                if data[i] < data[i - step]:
                    data[i], data[i - step] = data[i - step], data[i]
                    i -= step
                else:
                    break
        step //= 2
    return data

print(shell_sort([13,47,35,67,98,45]))
#输出 13 47 35 67 98 45

代码解释:

        (1)有这样一组数列,现在我们对其进行递增排序

        (2) 原始数据有6个数,6/2=3,所以每隔3位组成一个数列,然后分别对他们进行排序

        (3) 缩小间隔数为2,所以每隔2位组成一个数列,然后分别对他们进行排序

        (3) 继续缩小间隔数为1,对他们进行排序 

 

            (4)至此,排序完成输出结果 

总结:

        希尔排序适用于大规模数据的排序,特别是当数据基本有序时,其效率会更高。它通过分组的方式,使得数据在局部范围内有序,从而减少整体排序的复杂度。

注意事项:

  1. 间隔的选择:希尔排序的性能依赖于间隔序列的选择。这段代码使用的是最简单的间隔序列,即每次将间隔减半。然而,不同的间隔序列可能会带来不同的性能表现,选择合适的间隔序列是提高希尔排序效率的关键。

  2. 稳定性:希尔排序不是稳定的排序算法,即相等的元素可能会改变它们的相对顺序。如果需要稳定的排序,可以考虑使用其他算法,如归并排序或冒泡排序。

  3. 时间复杂度:希尔排序的时间复杂度取决于间隔序列的选择,最坏情况下可能接近 O(n^2),但在某些情况下,特别是使用特定的间隔序列时,其时间复杂度可以降低到 O(n log n)。

  4. 空间复杂度:希尔排序是原地排序算法,空间复杂度为 O(1),因为它只需要一个额外的存储空间用于交换元素。

平均时间复杂度最坏时间复杂度空间复杂度
希尔排序算法O(n log n)O(n^2)O(1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值