插入排序 折半插入排序 希爾排序

2021-10-10 17:02:39 字數 1431 閱讀 2597

1、排序演算法的穩定性:

①穩定的:關鍵字相同的元素在排序後相對位置不變

②不穩定的:關鍵字相同的元素在排序後相對位置改變

2、排序演算法分類:內部排序,外部排序。

1、演算法思想:每次將乙個待排序的記錄按其關鍵字大小插入到前面已排好序的子串行中,直到全部記錄插入完成。

2、①直接插入排序②帶哨兵的直接插入排序(不用temp,將首位置設為空,將需要排序的關鍵碼複製為哨兵)優點:不需要每輪迴圈判斷j>=0

3、空間複雜度:o(1) 。時間複雜度:最好o(n)、最壞o(n²)、平均o(n²)

4、直接插入排序示例(不含哨兵):

#include

# define n 5

void

input()

;void

insertsort()

;void

output()

;int a[n]

,i;void

input()

void

insertsort()

}void

output()

intmain()

1、思路:先用折半查詢找到應該插入的位置,再移動元素。(最終將當前元素插入到low即high+1的位置)為保障演算法穩定性,折半查詢至相等時將不會停止,應繼續在mid右邊繼續尋找插入位置。

2、折半查詢:對比需移動的元素與mid的大小,通過比較不斷縮小確定插入位置,相等或low>high時將停止查詢。

3、時間複雜度:o(n²)

4、含哨兵的折半插入排序示例:

void

insertsort()

for(j=i-

1;j>=high+1;

--j)

a[j+1]

=a[j]

; a[high+1]

=a[0];

}}

1、思想:先追求表中元素部分有序,再逐漸逼近全域性有序。

2、實現過程:增量d值為元素個數除2(可能會已知各種增量),將相差相同d的分為不同子表後對子表進行直接排序,每次將d減半,直至d=1後最終對整體進行一次直接插入排序。如:d=4,則1、5為子表1, 2、6為子表2,分別對子表1、2中元素進行直接排序。

3、空間複雜度:o(1) 。時間複雜度:最壞o(n²)即直接插入排序。

4、穩定性:不穩定

5、示例:

#include

#define n 5

int a[n]

,i,temp;

void

shellsort()

}}}}

void

input()

}void

output()

}int

main()

插入排序 折半插入排序

折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...

插入排序 折半插入排序

折半插入排序是基於直接插入排序的優化。直接插入排序 將第i個元素插入時,通過折半查詢的方式,來查詢第i個元素合適的位置。當0 i 1 位置上的元素都已經排序ok,現需要插入第i個元素,設其值為temp 令low 0,high i,mid high low 2。那麼temp可能插入的位置是 low h...

插入排序 折半插入排序

package sort 折半插入排序 當序列是連續儲存時,對直接插入排序進行的改進 插入位置可以更快速找到 直接插入排序a 0 用作哨兵減少條件判斷,折半插入排序不需要哨兵a 0 位置存放實際元素 public class insertsort 統一後移,空出插入位置 for j i 1 j hi...