直接插入排序
(insertion sort)
的基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。
設陣列為
a[0…n-1]
。 1.
初始時,
a[0]自成1
個有序區,無序區為
a[1..n-1]
。令i=12.將
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]時停止並將
temp
放到a[j + 1]
處。 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=12.將
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]時停止並將
temp
放到a[j + 1]
處。 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...
排序三 直接插入排序
設陣列為a n i 1。1.a 0.i 1 為有序區,現需要插入a i 到a 0 i 1 2.用a i 的值與a 1.n 1 中元素進行大小比較,找到插入位置將a i 插入,原插入位置上的元素依次後移。3.i 若i n則執行1。否則排序結束。來自維基百科 陣列s 9,1,5,3,8,7 第一趟 1,...
直接插入排序
直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...