#希尔排序之交换法(效率较低)
public static void ShellSorted(int arr[]) {
int tem = 0;
for (int gap = arr.length / 2; gap > 0; gap /= 2) {//外层确定间隔
for (int i = gap; i < arr.length; i++) {
for (int j = i - gap; j >= 0; j -= gap) {
if (arr[j] > arr[j + gap]) {
tem = arr[j];
arr[j] = arr[gap + j];
arr[gap + j] = tem;
}
}
}
}
}
#希尔排序之移位法(效率较高)
* 先对其进行gap分组,然后 内层采用简单的插入排序
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
for (int i = gap; i < arr.length; i++) {
int j = i;//插入的位置
int temp = arr[j];//插入的值
if (arr[j] < arr[j - gap]) { //插入位置的值小于 与其间隔位置的值
while (j - gap >= 0 && arr[j] < arr[j - gap]) {
arr[j] = arr[j - gap];
j -= gap;
}
//找到了插入的位置
arr[j] = temp;
}
}
}