package SortArith;
/**
* 希尔排序 (插入排序升级版)
* 相隔增量increment的组成一个序列
* increment增量的选取还是一个难题
* 排序算法时间复杂度突破了(O2)
* 不稳定排序
* @author lwk
*
*/
public class ShellSort {
public static void main(String[] args) {
int[] array={9,7,8,6,5,4,3,2,1};
shellSort(array);
for(int i=0;i<array.length;i++){
System.out.print(array[i]);
}
}
public static void shellSort(int[] array){
if(array == null || array.length == 0){
return;
}
//默认为数组长度,当increment为1时,终止循环
int increment = array.length;
//相隔增量increment的组成一个序列
do{
//每循环一次increment要改变
increment = increment/3 + 1;
for (int i = increment; i < array.length; i++) {
if(array[i] < array[i - increment]){
//待插入元素array[i]
int insertVal = array[i];
int j;
//将大于insertVal的元素右移
for (j = i - increment; j >= 0 && array[j] > insertVal ; j -= increment) {
array[j + increment] = array[j];
}
//此时j位于恰好小于insertVal的元素位置,因此待插入位置为j + increment
//插入元素insertVal
array[j + increment] = insertVal;
}
}
}
while(increment > 1);
}
}
算法 排序算法之希尔排序
最新推荐文章于 2022-05-17 08:00:00 发布