基本思想:
基本思想:算法先将要排序的一组数按某个增量 d(n/2,n为要排序数的个数)分成若
干组,每组中记录的下标相差 d.对每组中全部元素进行直接插入排序,然后再用一个较小
的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到 1 时,进行直接
插入排序后,排序完成。
图解
Java实现
public class Shell {
public void sort(int lists[]) {
int temp = 0;
double d = lists.length; // 得到长度
while (true) {
d = Math.ceil(d/2);// 得到向上取整的数
int md =(int) d;
for (int x = 0; x < md; x++) { //对被增量分割的每小组进行直接插入排序
for (int i = x+md; i < lists.length; i += md) {
int j = i - md;
temp = lists[i];
for (; j >= 0 && temp < lists[j]; j -= md) {
lists[j + md] = lists[j];
}
lists[j + md] = temp;
}
}
if (md == 1) {
break;
}
}
}
}