排序算法->希尔排序

希尔排序可以看成是插入排序的优化版,其核心排序步骤与插入排序基本相同,但是唯一不同
的是希尔排序对排序数组中数据排序思想的优化。为什么要优化插入排序,由于插入排序对于
大规模乱序数组的排序是很慢的,因为在插入排序中数据元素需要一点一点的从数组一端移动
到另外一端,这无疑在大规模乱序数组中是一个不好的体验。

希尔排序基本思路:
希尔排序在选取排序数组集采用了分组插入排序的方式,其通过一个gap增量每隔gap量选取一
个数组中元素。对于每一个组中的元素进行插入排序后缩小gap增量,如此往复直到gap=1,这
样就使得在一定范围内数据基本有序,再通过插入排序思想进行数据的微调大大减少了排序时间。

测试数据:(gap增量选择data.length/2)
初始数据:4 2 1 5
(第一轮分组[4,1] [2,5],进行插入排序)
第一轮排序结果:1 4 2 5
(第二轮gap=1,则直接进行插入排序)
第二轮排序结果:1 2 4 5
(排序完成)

参考代码

 public static int[] sort(int[] data)
    {
        //希尔增量以gap=data.length/2 gap/=2为准
        for(int gap=data.length/2;gap>0;gap=gap/2)
        {
            for(int i=gap;i<data.length;i++)
            {
                int temp=data[i];
                int j=i;
                if(j-gap>=0 &&  data[j-gap]<temp) continue;
                for(;j-gap>=0 && data[j-gap]>temp;j=j-gap)
                {
                    data[j]=data[j-gap];
                }
                data[j]=temp;
            }
        }

        return data;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值