算法導論之算法基礎(三)

插入排序

類比:如果你會玩鬥地主,那麼摸牌後按從小到大插入,你這樣插入的過程就是插入排序

程序:在程序中的玩法就像有一個人發牌,發齊了再拿牌,也就是一開始你就有17張牌,這17張牌對應17個元素的數組。你從第二種牌開始進行調動,如果第二張牌比第一張牌小,那麼就把第二張牌抽出來,然後把第一張牌放入到第二張牌的位置,再把抽出的牌放到第一張牌的位置,那麼前兩張牌就排好了;就是這樣依次類推的過程就是我們程序實現的原理。

代碼如下:

    public static void insertionSort(int[] a) {
        //以免重複計算數組的長度
        int len = a.length;
        //從第二個元素開始進行操作
        for (int i=1; i<len; i++) {
            //把這種元素提出來
            int key = a[i];
            int j = i -1;
            //去獲取提出元素的上一個元素,如果比提出元素大,則將這個元素往後移一位,依次類推
            while (j >=0 && a[j] > key) {
                a[j+1] = a[j];
                j--;
            }
            /*通過上面的循環就得到一個空的位置,前面的做法就是先把本來的位置放空,
              然後把當前的位置減一,那麼放回去的時候就是將當前位置加一就得到放空的位置了*/
            a[j+1] = key;
        }
    }

算法複雜度:O(n^{2})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章