直接插入演算法的學習記錄

weixin_39558555發表於2021-01-05

學習直接插入演算法記錄:

思想:
直接插入排序是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到一個新的、記錄數量增1的有序表。
這個句話怎麼理解呢:這句話的重點是已排好的有序表中插入一個待排序的元素;
舉個例子:

int[] array = new[] {8, 10, 50, 24, 13, 86, 16, 13, 14, 9, 6, 0};

這是一個無序陣列對它進行排序
1.首先我們可以把第一個元素 8 看作是一個有序的表,(即8前面的數字都比 8 要小)。
2.把8之後的都看作為待排序的元素
好下面上程式碼解釋

2.程式碼

   /// <summary>
    /// 直接插入排序
    /// </summary>
    /// <param name="array"></param>
  public static void StraightInsertionSort(int[] array) {
  //此時我們已經將8看作是有序的序列(即8前面的數字都比8小)
  //所以我們從待排的第一個元素開始遍歷
        for (int i = 1; i < array.Length; i++) {
            int sentinel = array[i]; // 找出第一個待排元素
            int j = i - 1; //此時他要跟有序序列的最後一個元素進行比較
            //如果 j > 0 並且待排元素比有序的最後一個元素要小 則將有序元素進行後移一位 再此跟倒數第二未元素進行比較,直到找到比到比待排元素小的停止
            while (j >= 0 && sentinel < array[j]) {
                array[j + 1] = array[j];
                j--;
            }
            array[j + 1] = sentinel;
        }
    }

總結一點就是將元素插入到合適的位置。

推薦學習演算法的網站:演算法學習-裡面有演示

最後:能力有限如果有解釋不清楚的地方望原諒。