public void shellSort(int[] array) {
            int gap = array.length;
            while(gap > 1) {
                    insertSortGap(array, gap);
                    //gap的缩小方式决定了性能提升的程度
                    gap = gap / 3 + 1;
            }
            insertSortGap(array, 1);
    }
    private void insertSortGap(int[] array, int gap) {
            for(int i = 0; i < array.length; i++) {
                    int tmp = array[i];
                    int j = i - gap;
                    for(;j > 0 && array[j] > tmp; j -= gap) {
                            array[j + gap] = array[j];
                    }
                    array[j + gap] = tmp;
            }
    }
原文:https://blog.51cto.com/14233687/2471952