/**
* 希尔排序
*/
public class SellSort {
public static void main(String[] args){
int[] array = {34, 8, 64, 51, 32, 21, 33, 1};
sellSort(array);
}
public static void sellSort(int[] array){
//设置元素之间的增量(也可以理解为交换的两个元素之间的间隔)
//每次交换一轮后,增量逐渐递减,增量的递减程度决定了算法的效率
for(int gap = array.length / 2; gap > 0; gap--){
//从第增量的位置为起点位置a[gap], 所以写作 a[i]
for(int i = gap; i < array.length; i++){
int temp = 0;
//每两个元素间隔gap,所以这里是第 a[gap] 和 a[0]交换
// j = i, 而i是要交换的起点元素i = gap,所以a[j]与a[j - gap] 交换
for(int j = i; j >= gap; j -= gap){
if(array[j] < array[j - gap]){
temp = array[j];
array[j] = array[j - gap];
array[j - gap] = temp;
}
}
}
}
for(int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}
}
}