直接插入排序的三種實現

2022-02-12 00:53:49 字數 2117 閱讀 7577

直接插入排序

(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開始...