希尔排序算法

希尔排序是一种改进的插入排序算法,通过分组进行插入排序,逐步减小分组间距,最终达到整体有序。其时间复杂度为 O(n^(1.3-2)),空间复杂度为 O(1)。在中等规模数据排序中表现出色,但对大规模数据不如快速排序。文章通过实例解释了希尔排序的过程,并提供了相关代码示例。
算法笔记–希尔排序

希尔排序是插入排序的一种,它是针对直接插入排序算法的改进,看起来也比较抽象,现实生活中感觉比较类似的例子是扑克洗牌整理牌的过程。它的核心是在大方向分组有序,然后逐渐细化分组有序,最终达到统一有序。希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 ) 复杂度的算法快得多。

看图理解

  • 初始增量第一趟 gap = length/2 = 4

  • 第二趟,增量缩小为 2

  • 第三趟,增量缩小为 1,得到最终排序结果

解题:用一个数组来表示元素集合

  1. 先二分好gap,并对gap内元素排序
  2. 再细化gap,并对gap内元素排序,结合代码好好体会图2的过程,这里有一个插入排序的过程
  3. 重复步骤直至数组完全排序

案例实践

public class ShellSort {
   
   

    public static void main(String[] args) {
   
   
        int[] a = {
   
   5,6,1,2,3,4,7,8
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值