時間複雜度:o(n^2)
每次都與它前乙個位置的元素作比較,如果小於它前乙個位置的元素就做交換。
/**
* 每次比較都進行交換,消耗時間長
* @param arr
* @param n
*/public
void
insertsort
(e arr,
int n)
else}}
}
存在的問題:
插入排序有提前終止第二層迴圈的機會,理論上應該比選擇排序要快一些,但是因為每一次與前面的元素進行比較時,如果小於前面的元素就進行交換,一次插入就可能會有多次的比較交換,一次交換就有三次賦值,實際消耗時間可能比選擇排序長。
插入排序優化:
增加乙個變數,等於當前待插入的元素,每次與前面的值進行比較,直到找到正確的位置,再進行交換。
(插入排序就像我們玩的撲克牌一樣,每次把抓到的牌插入到正確的位置。)
/**
* @param arr
* @param n
*/public
void
insertsort2
(e arr,
int n)
else
}//不再使用交換語句,而是使用賦值語句
arr[j]
= e;
}}
插入排序 折半插入排序
折半插入排序 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...