排序 一 直接插入排序

2021-07-11 03:14:39 字數 990 閱讀 5261

1.直接插入排序

1) 定義

直接插入排序(straight insertion sort )是一種最簡單的排序方法。它的基本操作是將乙個記錄插入到乙個長度為m (假設)的有序表中,使之仍保持有序,從而得到乙個新的長度為m +1 的有序表。

2)  演算法思路

設有一組關鍵字{k 1 ,k 2 ,…,k n };排序開始就認為k 1 是乙個有序序列;讓k 2 插入上述表長為1 的有序序列,使之成為乙個表長為2 的有序序列;然後讓k 3 插入上述表長為2 的有序序列,使之成為乙個表長為3 的有序序列;依次類推,最後讓k n 插入上述表長為n-1 的有序序列,得乙個表長為n 的有序序列。

【例】設有一組關鍵字序列{55 ,22 ,44 ,11 ,33 },這裡n=5 ,即有5 個記錄。請將其按由小到大的順序排序。排序過程如圖9.1所示。

第一趟:[55]   22   44  11  33 

第二趟:[22     55]   44   11  33

第三趟:[22     44   55]   11  33

第四趟:[11     22     44    55] 33

結果:[11     22      33   44   55 

3)具體演算法

template

void stinsort (t r,int n)

r[j+1]=r[0];        //將r[0]即原r[i]記錄內容,插到r[j]後一位置}

}    //sinsort

4) 演算法時間複雜度

此演算法外迴圈n-1 次,在一般情況下內迴圈平均比較次數的數量級為o(n) ,所以演算法總時間複雜度為o(n2) 。

5)直接插入排序的穩定性

直接插入排序是穩定的排序方法

排序一 直接插入排序

基本思想 當插入第i i 1 個物件時,前面的i 1 項 元素已經排序完成,這時 用 第 i 項 和 前面的 i 1 項進行比較,然後把插入的位置後面的元素後移一位 再 插入該位置。實現一趟排序的步驟 找位置 移位 插入資料 實現 void insertsort int arr size t siz...

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

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

插入排序 直接插入排序

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