网上 看到很多 希尔算法 个人认为 最优解是
public static void shellSort(int[] arr) {
for(int gas = arr.length/2; gas>0; gas/=2 ){
for(int i = gas;i<arr.length;i++){
for(int j = i-gas;j>=0 && arr[j]>arr[j+gas];j-=gas){
util.swap(arr,j,j+gas);
}
}
}
}
学习希尔算法过程
public class shellsort {
public static void main(String[] args) {
// int[] arr = {5, 1, 7, 3, 1, 6, 9, 4};
int[] arr = {5, 1, 7, 3, 1, 6, 9, 4,0,0};
long st = System.currentTimeMillis();
shellSort(arr);
util.print(arr);
System.out.println();
System.out.println(System.currentTimeMillis()-st);
}
public static void shellSort(int[] arr) {
for(int gas = arr.length/2; gas>0; gas/=2 ){
for(int i = gas;i<arr.length;i++){
for(int j = i-gas;j>=0 && arr[j]>arr[j+gas];j-=gas){
util.swap(arr,j,j+gas);
}
// util.print(arr);
// System.out.println();
}
// System.out.println("gas结束一次");
}
}
public static int[] shellSort1(int[] arr) {
for (int step = arr.length / 2; step > 0; step /= 2) {
for (int i = step; i < arr.length; i++) {
int prevalue = arr[i];
int j;
for (j = i - step; j >= 0 && arr[j] > prevalue; j -= step) {
arr[j + step] = arr[j];
}
arr[j + step] = prevalue;
}
for (int i : arr) {
System.out.print(i + "\\t");
}
System.out.println();
}
return arr;
}