算法 排序算法之希尔排序

来源:互联网 发布:淘宝隐形眼镜有假的吗 编辑:程序博客网 时间:2024/05/13 06:33
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//插入元素insertValarray[j + increment] = insertVal;}}     }     while(increment > 1);     }}

0 0