public class ShellSort {
public static void main(String[] args) {
int [] arr = {-1, 5, 2, 8, 45, 4, 1, 0, 40, 32};
// ort(arr);
sortMove(arr);
}
/*
将原来数组长度除2,得到将原数组分为几组,依次进行,直到数组长度为0为止,
分开的数组将两个逻辑上的数组的第一位与第一位、第二位与第二位为一组, 同理下去, 每组之间进行插入排序
加入数组长度11, 第一次排序分为5组, 第二次排序2组, 第三次就为1组
最后一次排序总会将原数组分为一组, 但这次已经接近于有序的
*/
private static void sortMove(int [] arr){
// 将原数组分组, 增量
for (int i = arr.length / 2; i > 0; i /= 2) {
for (int j = i; j < arr.length; j++) {
int index = j;
int value = arr[index];
if (arr[index] < arr[index - i]){
while (index - i >= 0 && value < arr[index - i]){
arr[index] = arr[index - i];
index -= i;
}
arr[index] = value;
}
}
}
listArray(arr);
}
private static void listArray(int [] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
|