//希尔排序(二分后在直接插入排序)
public static int[] shellSort(int[] arr){
//计算增量
for(int d = arr.length/2; d > 0; d/=2){
//插入排序
for(int i = d; i < arr.length; i++){
int temp = arr[i];
for(int j = i; j >= d; j-=d){
if(temp < arr[j-d]){
arr[j] = arr[j-d];
arr[j-d] = temp;
}
}
}
}
return arr;
}
测试:
public static void main(String[] args) {
int[] arr = new int[]{3,4,2,7,9,5,6,1,8};
System.out.println("排序前的数据");
for(int a:arr){
System.out.print(a);
}
System.out.println();
arr = shellSort(arr);
System.out.println("排序后的数据");
for(int a:arr){
System.out.print(a);
}
}
我的问题在纸上标明了