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