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 ...