希尔排序本质上和插入排序差别不大。
就是将一个较长的数组,分成好几个长度相同的数组,
然后比较不同数组种相同位置值的大小,进行排序后,将数组慢慢排序趋于有序,然后将分组扩大,直至这个数组有几个值就有几个分组。
package 希尔排序;
import java.util.Arrays;
public class Test {
public static void shellSort(int[] array) {
//确定分组数,/2 /4 /8
int gap = array.length / 2;
while(gap > 1) {
insertSortGap(array,gap);
gap = gap/2;
}
insertSortGap(array,1);
}
private static void insertSortGap(int[] array, int gap) {
for(int bound = gap;bound < array.length; bound++) {
int tmp = array[bound];
int cur = bound - gap;
for(;cur >= 0;cur = cur - gap) {
if(array[cur] < tmp) {
array[cur + gap] = array[cur];
} else {
break;
}
}
array[cur + gap] = tmp;
}
}
public static void main(String[] args) {
int[] array = {1,3,2,6,4,5,9,7,8,0};
shellSort(array);
System.out.println(Arrays.toString(array));
}
}
结果
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]