直接插入排序

2022-06-25 10:36:08 字數 1036 閱讀 9851

直接插入排序的基本思想:將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的,記錄增長1的有序表。

以順序表l = 為例,length = 5,參與排序的紀錄為r[1]~r[5],r[0]充當哨兵(中間變數)

,協助排序的進行。**如下所示:

1

//將乙個記錄插入到已經排好序的有序表中2//

l->r[0]當作哨兵

3void insertsort(sqlist*l)427

}28 }

順序表中的記錄變化如下所示:

(注意:圖中的 「=」 是相等的意思,是經過**中賦值語句之後的結果,不是賦值的意思)

當滿足if條件時,即r[i] < r[i-1],說明對於乙個已經排好序的有序表,待插入的第i個記錄的關鍵字大於有序表中的最後乙個記錄的關鍵字(有序表中關鍵字最大的記錄),需要將其插入有序表;否則,不需要做任何處理。在進行後續處理之前,將r[i]存入哨兵r[0]中,防止後續記錄後移的時候將r[i]的值覆蓋掉。

將記錄插入有序表的過程中,由於並不知道需要將其插入到哪個位置,所以從有序表的最後乙個記錄r[i-1]開始,依次與r[0](即r[i],r[i]到後面會被覆蓋)進行比較,若r[i-1]>r[0],說明需要將r[i]插入到r[i-1]的前面,故將r[i-1]進行後移,依次與有序表中的記錄(從後往前)進行比較,並進行後移處理,最終將帶插入記錄插入到正確的位置。

「依次與有序表中的記錄(從後往前)進行比較」,如果從前往後進行記錄後移的話,後面的記錄將會被覆蓋掉。

回顧 「直接插入排序的基本思想:將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的,記錄增長1的有序表。」,如何理解這句話呢?在step1中,為已經排好序的有序表,我們將記錄3插入到中,最終得到了乙個新的,記錄增長1的有序表,依次進行,最終可以將乙個順序表排成乙個有序表。

氣泡排序

簡單選擇排序

希爾排序

堆排序 

歸併排序 

快速排序 

直接插入排序

直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...

直接插入排序

直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...

直接插入排序

源文章url http student.zjzk.cn course ware data structure web paixu paixu8.2.1.1.htm 做過部分修改。1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至...