将数组依次除二拆分,对拆分的数组进行插入排序
public static void main(String[] args) {
int[] arr = {12,14,16,15,13,18,17,11,10,3,6,7,2,8,9};
shellSort(arr);
System.out.println("排序完成");
}
private static void shellSort(int[] arr) {
//定义步长,每次减为原来的一半
for (int i = arr.length/2; i > 0 ; i/=2) {
//对每一组数据进行插入排序
for (int j = 0; j < i; j++) {
//对本组数据直接插入排序
for (int k = j + i; k < arr.length; k+=i) {
//如果arr[k]<arr[k-i],找到arr[k],并将后面数据后移,升序
/* if (arr[k] < arr[k-i]){
int l;
int temp = arr[k];
for (l = k - i; l>=0 && arr[l]>temp; l-=i) {
arr[l+i] = arr[l];
}
arr[l+i] = temp;
}*/
//降序
if (arr[k] > arr[k-i]){
int l;
int temp = arr[k];
for (l = k - i; l>=0 && arr[l]<temp; l-=i) {
arr[l+i] = arr[l];
}
arr[l+i] = temp;
}
}
}
}
}