Java数据结构与算法《八》希尔排序

来源:互联网 发布:郑也夫被打脸 知乎 编辑:程序博客网 时间:2024/06/05 07:20
希尔排序基于插入排序,添加了一些新的特性,从而大大的提高了插入的执行效率插入排序的缺陷 多次的移动  希尔排序的优点通过加大插入排序中元素的间隔,并对这些间隔的元素进行插入排序,从而使得数据可以大幅度的移动 每当完成该间隔的排序后希尔排序会减少数据的间隔进行排序 依次进行下去保证右边都是大数字间隔的计算间隔h的初始值为1,通过h=3h+1来循环计算 知道间隔大于该数组的大小时停止最大的间隔不大于数组大小的最大值五间隔的为不大于数组的大小的最大值五间隔的减少通过公式h=(h-1)/3来计算
public class ShellSort{    //排序方法    public static void sort(long[] arr){        //初始化一个间隔        int h=1;        while(h<arr.length/3){            h=h*3+1;        }        while(h>0){            long temp=0;//进行插入排序            for(int i=h;i<arr.length;i++){                temp =arr[j];                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;        }    }}
0 0
原创粉丝点击