希尔排序实际上是插入排序的优化,根据分组从而实现插入排序的最优
public void shellsort1(int a[], int n){ int grap, i, j, temp; // 每次为原来的一半 for (grap = n/2; grap > 0; grap /= 2){ for (i = grap; i < n; i++){ for (j = i - grap; j >= 0 && a[j]>a[j+grap]; j -=grap){ temp = a[j]; a[j] = a[j+grap]; a[j+grap] = temp; } } } } public void sehllsort2(int[] a, int n, int[] d, int numOFD){ int i, j, k, m, span, temp; for (m = 0; m < numOFD; m ++){ span = d[m]; for (k = 0; k < span; k++){ for (i = k; i<n-span; i = i+span){ temp = a[i+span]; j = i; while(j>-1 && temp < a[j]){ a[j+span] = a[j]; j = j-span; } a[j+span] = temp; } } } }