for (intj= i; j <arr.length ; j++) {//选择排序,从mid开始数,找j-i来比较, int k=j-i; int tem=arr[j];//要插入的元素 while (k>=0&&tem<arr[k]){ arr[k+i]=arr[k]; k-=i; } arr[k+i]=tem; }
public class 希尔排序 { publicstaticvoidmain(String[] args) { int[] arr={8,9,1,7,2,3,5,4,6,0}; // for (int i = arr.length/2; i >0 ; i/=2) {//要分的组数 // for (int j = i; j <arr.length ; j++) {//从哪里形成组数 // for (int k = j-i; k>=0 ; k-=i) {//形成组,夸区域 // if (arr[k+i]<arr[k]){ // int tem=arr[k+i]; // arr[k+i]=arr[k]; // arr[k]=tem; // } // } // // } // // }
//优化希尔排序,用移位法 for (inti= arr.length/2; i >0; i/=2) { for (intj= i; j <arr.length ; j++) { int k=j-i; int tem=arr[j];//要插入的元素 while (k>=0&&tem<arr[k]){ arr[k+i]=arr[k]; k-=i; } arr[k+i]=tem; }
} for (inti=0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } }