基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
1 public static void main(String[] args){ 2 int a[] = {34, 8, 64, 51, 32, 21}; 3 shellSort(a); 4 for (int i = 0; i < a.length; i++) { 5 System.out.print(a[i] + " "); 6 } 7 } 8 9 public static void shellSort(int[] a) { 10 for (int gap = a.length/2; gap > 0; gap /= 2) { 11 for (int i = gap; i < a.length; i++) { 12 int temp = a[i]; 13 int j; 14 for (j = i; j >= gap && temp < a[j-gap]; j -= gap) { 15 a[j] = a[j-gap]; 16 } 17 a[j] = temp; 18 } 19 } 20 }