ShellSort Shell排序

希尔排序(Shell Sort)又称为“缩小增量排序”。是1959年由D.L.Shell提出来的。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
具体做法:首先确定一组增量d0,d1,d2,d3,...,dt-1()其中n>d0>d1>...>dt-1=1),对于i=0,1,2,...,t-1,依次进行下面的各趟处理:根据当前增量di将n个元素分成di个组,每组中元素的下标相隔为di;再对各组中元素进行直接插入排序.

 

public class TestShellSort {

    

    public int[] shellSortArray(int[] arr){

        int length = arr.length;

        int inc = length;

        int key, j;

        do{

            inc = inc/3+1;

            for(int i = inc; i < length; i ++){

                key = arr[i];

                for(j = i-inc; j >= 0 && arr[j] > key; j -= inc ){

                    arr[j + inc] = arr[j];         

                }

                arr[j+inc] = key;

            }

            

        }while(inc > 1);

        

        return arr;

    }

    

    public static void main(String[] args) {

        int[] arr = {6,2,4,1,5,9};

        TestShellSort test = new TestShellSort();

        test.shellSortArray(arr);

        

        for(int i = 0 ; i < arr.length; i ++){

            System.out.println(arr[i]);

        }

        

    }



}

 

ref:

http://www.cnblogs.com/elwinch/archive/2011/05/19/2051562.html

http://www.2cto.com/kf/201109/104886.html

你可能感兴趣的:(shell)