排序一 直接插入排序

2021-07-16 11:00:39 字數 975 閱讀 4331

基本思想

當插入第i (i  >= 1)個物件時,前面的i - 1 項 元素已經排序完成,這時 用 第 i 項 和 前面的 i -1 項進行比較,然後把插入的位置後面的元素後移一位 ,再 插入該位置。

實現一趟排序的步驟:

找位置 -->移位    -->    插入資料

實現**:

void insertsort(int* arr , size_t size)

//存放資料

arr[end + 1] = temp;

}}

直接插入排序的思路其實就這麼簡單 , 實現的**也很容易 。那我們就分析它的時間複雜度、空間複雜度和演算法的穩定性

當資料正序時,執行效率最好,每次插入都不用移動前面的元素,時間複雜度為o(n)。 

當資料反序時,執行效率最差,每次插入都要前面的元素後移,時間複雜度為o(n^2)

所以,資料越接近正序,直接插入排序的演算法效能越好

我們在排序過程中,需要乙個臨時變數儲存要插入的值,所以空間複雜度為1

在直接插入排序的過程中,不需要改變相等數值元素的位置,所以它是穩定的演算法。 

適應條件:

1、資料量較小 ; 2、資料接近有序

擴充套件:

直接插入排序,我們能夠進一步優化。首先,能想到的就是,利用二分法找數字會不會快一點呢?這就要講到折半插入排序,具體做法也會在後面一一介紹。

排序 一 直接插入排序

1 直接插入排序 1 定義 直接插入排序 straight insertion sort 是一種最簡單的排序方法。它的基本操作是將乙個記錄插入到乙個長度為m 假設 的有序表中,使之仍保持有序,從而得到乙個新的長度為m 1 的有序表。2 演算法思路 設有一組關鍵字 k 1 k 2 k n 排序開始就認...

排序演算法之一 直接插入排序

直接插入排序中加入了附加記錄,又稱監視哨或者哨兵。哨兵的主要作用 進人查詢 插入位置 迴圈之前,它儲存了r i 的副本,使不致於因記錄後移而丟失r i 的內容 它的主要作用是 在查詢迴圈中監視下標變數j是否越界。一旦越界 即j 0 因為r 0 可以和自己比較,迴圈判定條件不成立使得查詢迴圈結束,從而...

插入排序 直接插入排序

直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...