JAVA实现希尔排序
北京时间2022年03月15日,晚23:31分。天气晴朗,多云较闷热,温度28。现在来实现JAVA希尔排序,希尔排序的核心先分组,每一组自己执行插入排序,然后再分组再执行插入排序...所以,思路为:
(一)、先按size/2分成步长为n的x组,这x组中元素依次从后面开始插入排序(按照步长n依次往前)。
(二)、再按size/2/2分成x/2组,这x/2组中元素依次从后面开始插入排序(按照步长n/2依次往前)。
(三)、重复(二)步骤,知道x>0
(四)、代码实现:
public static void main(String[] args){
int[] arrays = {8,-1,10,-2,9,-99,1,10086,2};
int[] array = {1000,999,888,777,666,555,444,333,222,111,0};
ShellSort(array);
print(array);
}
/**
* 希尔排序的思想是不断缩小增量,底层还是插入排序
* 比如array.length=10,第一次增量是10/2=5,既从5开始到9,每次选择(5-9)-5,既有(5,0)(6,1)(7,2)(8,3)(9,4)的五组插入排序
* 第二次增量是5/2=2,既从2-9开始,选出(2,4,6,8)(0,3,5,7,9)
*/
public static void ShellSort(int[] array){
int size = array.length;
for (int gap = size/2;gap>0;gap/=2){
for (int i=gap;i<size;i++){
int j = i;
while (j-gap>=0){
if (array[j]<array[j-gap]){
int temp = array[j-gap];
array[j-gap] = array[j];
array[j] = temp;
}else {
break;
}
j -= gap;
}
}
}
}
public static void print(int[] array,String... str){
System.out.println(str);
for (int i:array){
System.out.print(i+" ");
}
System.out.println();
}