Python插入排序希尔排序

希尔排序(Shell Sort)是一种插入排序的改进版本,它通过将待排序的元素分成若干个小组,对每个小组进行插入排序,逐步缩小小组的间隔,最终完成整个序列的排序。

def shell_sort(arr):
    n = len(arr)
    gap = n // 2

    while gap > 0:
        for i in range(gap, n):
            temp = arr[i]
            j = i
            while j >= gap and arr[j - gap] > temp:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp

        gap //= 2

    return arr

# 测试示例
arr = [12, 34, 54, 2, 3]
sorted_arr = shell_sort(arr)
print(sorted_arr)

在上面的示例代码中,shell_sort函数实现了希尔排序的算法。首先确定初始的间隔gap为数组长度的一半,然后不断地缩小gap,对每个小组进行插入排序操作,直到gap为1时完成排序。

希尔排序是一种改进的插入排序算法,其原理如下:

  1. 首先确定一个增量序列,通常选择的增量序列是n/2, n/4, n/8, ... 1,直到增量为1;
  2. 根据增量序列,将待排序的序列分成若干个子序列,对每个子序列进行插入排序;
  3. 逐步缩小增量,重复上述步骤,直到增量为1时,进行最后一次插入排序,完成排序。

希尔排序通过较大的增量先排序,使得序列变得部分有序,然后逐步减小增量,最终完成排序。这种分阶段的排序方式可以提高排序效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值