前言
插入排序的代碼實現雖然沒有冒泡排序和選擇排序那麼簡單粗暴,但它的原理應該是最容易理解的了,因爲只要打過撲克牌的人都應該能夠秒懂。插入排序是一種最簡單直觀的排序算法,它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。
插入排序和冒泡排序一樣,也有一種優化算法,叫做拆半插入。
算法步驟
1、將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最後一個元素當成是未排序序列。
2、從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)
動圖演示
PHP代碼實現
function InsertSort($arr){
$num = count($arr);
// 遍歷數組
for ($i = 1;$i < $num; $i++) {
// 獲得當前值
$iTemp = $arr[$i];
// 獲得當前值的前一個位置
$iPos = $i - 1;
// 如果當前值小於前一個值切未到數組開始位置
while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
// 把前一個的值往後放一位
$arr[$iPos + 1] = $arr[$iPos];
// 位置遞減
$iPos--;
}
$arr[$iPos+1] = $iTemp;
}
return $arr;
}
或
function InsertSort($arr) {
$length = count($arr);
for ($i = 0; $i < $length - 1; $i++) {
for ($j = $i + 1; $j > 0; $j--) {
if ($arr[$j] < $arr[$j - 1]) {
$temp = $arr[$j - 1];
$arr[$j - 1] = $arr[$j];
$arr[$j] = $temp;
} else {
break;
}
}
}
return $arr;
}