希爾排序

public class shellSort {

    /*
     * 希爾排序的時間複雜度好的情況下爲O(n),壞的情況下O(n*n)空間複雜度爲O(1)
     * 
     */
    public static void main(String[] args) {
        //創建一個數組用於排序
        int[]array={1,4,3,2,6,12,10};
        array=shell_sort(array);
        //打印排序後的數組
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+" ");
        }

    }

    //希爾排序
    public static int [] shell_sort(int []array){
        int gap=array.length;
        while(true){
            gap=gap/2;
            //最外層的for循環用於控制一次希爾排序的次數
            for(int i=0;i<gap;i++){
                //內層的兩個for循環用於根據gap值選成一組的進行排序
                for(int j=i+gap;j<array.length;j+=gap){
                    //temp相當於待插入數據
                    int temp=array[j];
                    int k;
                    for(k=j-gap;k>=0&&array[k]>temp;k-=gap){
                        array[k+gap]=array[k];
                        array[k]=temp;
                    }
                }
            }
            if(gap==1){
                break;
            }
        }
        return array;
    }

}
發佈了30 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章