算法思想
1、首先选定记录间的距离为d(从数组第一个元素开始起),在整个待排序的记录序列中,将所有间隔为d的记录分成一组,进行组内的插入排序。
2、然后取d = d / 2,再重复1的步骤,直到d = 1,这时只有一个子序列,对该序列进行直接插入排序,完成整个排序过程
代码
import java.util.Arrays;
public class xiersort {
public static void main(String[] args) {
int[] arr = {46,55,13,42,94,17,05,70};
xesort(arr);
System.out.println(Arrays.toString(arr));
}
public static void xesort(int[] arr) {
//数组的长度
int len = arr.length;
//del为步长距离,每次折半,直到为1
for (int del = len / 2; del > 0; del = del / 2) {
for (int i = del; i < len; i++) {
int j = i - del;
// tem做为一个备份,记录当前值
int tem = arr[i];
while (j >= 0 && tem < arr[j]) {
// 如果tem比前面值小,则将前面的值后移del长度
arr[j + del] = arr[j];
j = j - del;
}
arr[j + del] = tem;
}
}
}
}