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

posted @ 2013-09-06 12:12  Ruth/Christy  阅读(340)  评论(0编辑  收藏  举报