//希尔排序
input: an array a of length n with array elements numbered 0 to n − 1
gap ← round(n/2)
while gap > 0 do:
for i = gap to n − 1 do:
temp ← a[i]
j ← i
while j ≥ gap and a[j − gap] > temp do:
a[j] ← a[j − gap]
j ← j − gap
a[j] ← temp
gap ← round(gap / 2)
@Test
public void test(){
Integer[] arr= {8, 5, 10, 12, 7, 6, 15, 9, 11, 3};
for (int group = arr.length / 2; group > 0; group /= 2) {
for (int i = group; i < arr.length; i++) {
for (int j = i - group; j >= 0; j -= group) {
if (arr[j] > arr[j + group]) {
int temp = arr[j];
arr[j] = arr[j + group];
arr[j + group] = temp;
}
}
}
}
for(Integer it : arr){
System.out.print(" "+it);
}
}
3 5 6 7 8 9 10 11 12 15