基本思想:每趟將乙個元素,按其關鍵字大小,插入到它前面已排序的子串行中,使得插入後的子串行仍是排序的,一次重複直到全部元素插入完畢。
插入排序演算法有三種:直接插入排序、折半插入排序和希爾排序。
1.直接插入排序演算法描述:
a.第i(1<=i是排序的,將元素ai插入到子串行的適當位置,使插入後的子串行仍然是排序的,ai的插入位置由關鍵字比較決定。
b.重複上述操作,n個元素共需n-1趟掃瞄,每趟將乙個元素插入到它前面的子串行中。
關鍵字序列的直接插入排序(公升序)過程如下圖
上述序列中有兩個相同關鍵字,以*區別。圍排序時,關鍵字26在26*之前,排序後,26仍在26*之前。因此直接插入排序演算法是穩定的。
2.直接插入排序演算法實現
package cn.crazyguan.sort;
/** *
* @author guan
* @description insertion sort implements by array
*/public class insertionsort {
/*** @function 產生n個隨機數,返回整數陣列
* @param n 隨機數組長度
* @return 生成的隨機數組
*/public static int random(int n){
if(n>0){
int table = new int[n];
for(int i =0;i-1&&temp-1&&tamp<=table[j];j--)中,關鍵字相等時,前面元素也向後移動,導致排序演算法不穩定。
3.直接插入排序演算法分析
設資料序列有n個元素,直接插入排序演算法執行n-1趟,每趟的比較次數和移動次數與資料序列的初始排列有關。以下分最好、最壞和隨機三種情況分析直接插入排序演算法的時間複雜度。
插入排序 折半插入排序
折半插入排序 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...
插入排序 希爾插入排序
本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...