排序算法——希尔排序

4.希尔排序

(1)基本思想:

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法进行排序:随着增量不断减少,每组包含的元素个数不断增加,当增量为1时,整个文件恰被分为一组,算法便终止了。

(2)希尔排序示意图:

图解说明:

a.总共要进行 【gap = arr.length / 2 到 gap =1 ,且每次增量减少为原来一半,即gap = gap /2】 轮

b.每一轮中就是对于每组的元素的直接插入排序

c.注意每一轮中的直接插入排序并不是把某一组全部排完再排其他组,而是每一组排一次,轮流来。

(3)代码实现:

 public void shellSort(int[] arr){
        int gap = 0;
        int j;
        //不断缩减增量gap
        for(gap = arr.length / 2;gap > 0;gap = gap / 2) {
            //直接插入排序
            for(int i = gap;i < arr.length;i++) {
                int value = arr[i];
                int index = i;
                for(j = index;j - gap >= 0 && value < arr[j - gap];j -= gap) {
                    arr[j] = arr[j - gap];
                }
                arr[j] = value;
            }
        }
    }

注:冒泡、选择、直接插入排序请转  常见的排序算法——插入排序_小何小何h的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值