基礎演算法之二 直接插入排序的三種實現

2021-08-05 19:47:54 字數 790 閱讀 9111

直接插入排序(insertion   sort)的基本思想是:每次將乙個帶排序的記錄,按其關鍵字大小插入到前面已經排好的子串行中的適當位置,直到全部插入完成為止。

設陣列為a[0....n-1]。

1,初始時,a[0]自成乙個有序區,無序區為a[1.....n-1]。令i=1.

2.將a[i]併入當前的有序區a[0...i-1]中形成a[0...i]的有序區間。

3.i++並重複第二步直到i==n-1。排序完成。

下面給出嚴格按照定義書寫的**(有小到大排序)

void insertsort1(int a, int n)  

} }

這樣的**太長了,不夠清晰。現在進行一下改寫,將搜尋和資料後裔這兩個步驟合併。即每次a[i]先和前面的乙個資料a[i-1]比較,如果a[i]>a[i-1]說明a[0...i]也是有序的, 無需調整。否則就令j=i-1,temp=a[i]。然後一邊將資料a[j]向後移動一邊向前搜尋,當有資料a[j]

void insertsort2(int a, int n)  

}

再對將a[j]插入到前面的a[0...j-1]的有序區間所用的方法進行改寫,用資料交換代替資料後移。如果a[j]前乙個資料a[j-1]>a[j],就交換a[j]和a[j-1],再j - 直到a[j-1]<=a[j]。這樣也可以實現將乙個新資料新併入到有序區間。

void insertsort3(int a, int n)  

直接插入排序的三種實現

本文 直接插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。設陣列為a 0 n 1 1.初始時,a 0 自成1個有序區,無序區為a 1.n 1 令i 1 2.將a i 併入當前的有序區a 0...

直接插入排序的三種實現

直接插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。設陣列為 a 0 n 1 1.初始時,a 0 自成1 個有序區,無序區為 a 1.n 1 令i 12.將 a i 併入當前的有序區 a ...

演算法基礎 直接插入排序

一 直接插入排序 基本思想 每次將乙個待排序的序列的乙個元素,插入到已經排好序的序列中。如待排序列a 假設我們希望序列是從下到大排列的,那麼,首先將序列a分解為a1 和a2 其中a1作為排好的序列,這樣一來,首先從a2中取第乙個元素 1,與a1中的1比較,按從下到大順序把 1放入a1中,a2的其他元...