希尔排序

来源:互联网 发布:服装设计淘宝 编辑:程序博客网 时间:2024/03/29 14:08

希尔排序

对于大规模乱序数组来说,插入排序很慢,因为它只会交换相临近的元素
因此元素只能一点一点的从一端移动到另一端。希尔排序进行了改进。
希尔排序的思想是使得数组中任意间隔为h的元素都是有序的。
h有序数组:h个相互独立的数组编织在一起组成一个数组。
实现希尔排序的一种方法是对于每个h,用插入排序将h个子数组独立的排序。

  • 代码实现
//在插入排序中加入一个外循环,控制h的变化public void sort(int[] a){    int N = a.length;    int h = 1;    while(h < N/3) h = 3*h+1; //1, 4, 13...    while(h >= 1){        //将数组变为h有序        for(int i = h; i < N; i++){//进行插入排序            //将a[i]插入到a[i-h], a[i-2*h], a[i-3*h]...之中            for(int j = i; j >= h && less(a[j], a[j-h]); j -= h)                exch(a, j, j-h);        }        h = h/3;    }   }
原创粉丝点击