两两分组先排序,然后再合并排序,不断缩小步长,在组内进行插入排序
1.希尔排序如何分组:
第一轮:步长:数组长度的一半
第二轮:步长:数组长度的一半的一半
第三轮:步长:数组长度的一半的一半的一半
代码:
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int[] arr = new int[]{5,7,4,2,0,1,3,6};
shellsort(arr);
}
public static void shellsort(int[] arr) {
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]) {
//前后交换
int temp = arr[j+gap];
arr[j+gap] = arr[j];
arr[j] = temp;
}else {
break;
}
}
}
}
System.out.println(Arrays.toString(arr));
}
}