基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)继续对它进行分组,并对每组中全部元素再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
private void shellSort(int[] pInts) {
// 定义一个增量值d,并初始化为数组的长度
int d = pInts.length;
int temp;
while (true) {
d = d >>> 1;
for (int x = 0; x < d; x++) {
for (int i = x + d; i < pInts.length; i += d) {
int j = i - d;
temp = pInts[i];
for (; j >= 0 && pInts[j] > temp; j -= d) {
pInts[j + d] = pInts[j];
}
pInts[j + d] = temp;
}
}
if (d == 1) {
break;
}
}
}
网友评论