排序之希尔排序

Posted duy666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序之希尔排序相关的知识,希望对你有一定的参考价值。

 

希尔排序

我们先在方法中找出它最大的间隔h,
第一趟,将要排序的一组数按增量h分成若干组,每组中记录的下标相差h,
对每组中全部元素进行排序。
第二趟,间隔为h = (h-1)/3,以后的每趟间隔都是h = (h-1)/3,
直到间隔变为1,整个要排序的数被分成一组,排序完成。

一般的初次取序列的一半为增量,以后每次减半,直到增量为1。

public class ShellSort {
    public static void shellSort(int[] arr) {
        //临时变量,储存当前元素
        int h = 1;
        //计算最大间隔
        while(h<arr.length/3) {
            h = h*3 + 1;
        }
        
        while(h>0) {
            int tmp = 0;
            for(int i = h;i<arr.length;i++) {
                tmp = arr[i];
                int j = i;
                while(j>h - 1&&arr[j-h]>=tmp) {
                    arr[j] = arr[j-h];
                    j -= h;
                }
                arr[j] = tmp;
            }
            //减少间隔
            h = ( h - 1) / 3;
        }
    }
}

技术分享图片











以上是关于排序之希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

图解排序算法之希尔排序

图解排序算法之希尔排序

排序算法入门之希尔排序(java实现)

图解排序算法之希尔排序

算法之希尔排序快速排序二分查找

重温基础算法内部排序之希尔排序法