八大排序 -- 插入排序 之 【shell排序】

shell排序的策略:

1.先对子序列进行 直接插入排序 ; 待整个序列基本有序后
2.在对整个序列进行 直接插入排序
希尔排序,它通过比较相距一定间隔的元素来工作;各趟比较所用的增量随着算法的进行而减小,直到比较相邻元素的最后一趟排序为止。】
希尔排序 有是 也叫作 缩减增量排序

在使用h进行一趟排序后,所有间隔为h的元素已经排序,此时称是h排序的。

代码

package ch02;
import util.ArrayUtil;
//取增量值;一种好的取增量的方法是改进希尔排序算法时间性能的关键;
public class ShellSort {
    //希尔排序 时间复杂度 
    public static void doShellSort(int[] array){          //gap 差距 的意思
        /增量的选择
        for(int gap=array.length/2;gap>0;gap/=2){
        //n-gap 趟排序
            for(int i=gap;iint tmp = array[i];
                int j;
                for(j=i;j>=gap&&tmppublic static void main(String[] args) {
//      int[] array = new int[]{2,8,6,4,3,9,1};
        int[] array = new int[]{58,46,72,95,84,25,37,58,63,12};
        ArrayUtil.display(array);
        //数组的某个值a[i]是值传递;整个数组是引用传递
        doShellSort(array);
        ArrayUtil.display(array);
    }
}

你可能感兴趣的:(算法和数据结构)