排序算法-直接插入排序

直接插入排序法介紹

直接插入排序法的思路是:將一個關鍵字插入到一個已經排好序的有序列表中,得到一個新的有序列表。
比如有關鍵字序列{4,2,3,6,5,1},那麼對其進行直接插入排序法進行排序,步驟如下圖:
在這裏插入圖片描述

直接插入排序法算法

java

    public static void insertSort(Integer[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] > arr[i + 1]) { //比較大小
                int j = i; //需往右邊移動的關鍵字下標
                int temp = arr[i + 1];
                while (arr[j] > temp) { //比較大小
                    arr[j + 1] = arr[j]; //關鍵字右移
                    if (j <= 0) { //最後跳出循環
                        break;
                    }
                    j--;
                }
                arr[j] = temp; //插入關鍵字
            }
        }
    }

時間複雜度

從最好情況來看,如{1,2,3,4,5,6}這樣已經排好的序列,比較次數爲n-1次,由於已經排好序了,所以不需要移動,時間複雜度爲O(n)O(n)
從最壞情況來看,如{6,5,4,3,2,1}這樣的逆序序列,比較次數爲i=2ni\sum_{i=2}^{n}i = 2+3+4+···+n = (n+2)(n1)2\frac{(n+2)(n-1)}{2}次,記錄的移動次數爲i=2n(i+1)\sum_{i=2}^{n}(i+1) = 3+4+5+···+n = (n+4)(n1)2\frac{(n+4)(n-1)}{2}次。
所以最壞情況的時間複雜度爲O(n2)O(n^{2})

從概率來講,如果關鍵字序列都是隨機的,那麼每一個關鍵字出現是有序和非有序的概率是相同的,那麼平均比較次數和移動次數約n24\frac{n^{2}}{4}次。而簡單選擇排序法不管最優還是最差情況,比較次數都爲n(n1)2\frac{n(n-1)}{2}次,所以從這個角度來看直接插入排序法要優於簡單選擇排序法

和簡單選擇排序法的性能比較

以下分別使用簡單選擇排序法和直接插入排序法對10萬隨機關鍵字的排序耗時,從結果可以看出直接插入排序的執行時間比簡單選擇排序法快0.4倍。

簡單選擇排序執行時間:7894ms
直接插入排序執行時間:4514ms
發佈了69 篇原創文章 · 獲贊 86 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章