高级排序之希尔排序

/**
 * 高级排序,希尔排序
 * Create by Administrator
 * 2018/7/2 0002
 * 下午 4:20
 **/

class ArraySh{
    private long[] theArray;
    private int nElems;

    public ArraySh(int max){
        theArray = new long[max];
        nElems = 0;
    }

    public void insert(long value){
        theArray[nElems] = value;
        nElems++;
    }

    public void display(){
        for (int i = 0; i < nElems; i++) {
            System.out.print(theArray[i] + " ");
        }
        System.out.println();
    }

    public void shellSort(){

        int inner,outer;
        long temp;

        int h = 1;
        while(h <= nElems/3) {
            h = h * 3 + 1;              //找到最大间隔
        }
        while(h > 0){
            for (outer = h; outer < nElems; outer++) {
                temp = theArray[outer];
                inner = outer;
                while (inner > h-1 && theArray[inner - h] >= temp){
                    theArray[inner] = theArray[inner-h];
                    inner -= h;
                }
                theArray[inner] = temp;
            }
            h = (h-1) / 3;
        }
    }

    public static void main(String[] args) {
        int  maxSize = 20;
        ArraySh arraySh = new ArraySh(maxSize);
        for (int i = 0; i < maxSize; i++) {
            long l = (int) (Math.random() * 90);
            arraySh.insert(l);
        }
        arraySh.display();

        arraySh.shellSort();

        arraySh.display();
    }
}

  

原文地址:https://www.cnblogs.com/chancy/p/9254727.html