此算法主要原理:每次把一個待排序的關鍵碼插入到已排好序的序列中。
排序過程:
1、整個序列分成有序區和無序區,初始化有序區為待排序記錄的第一個記錄,無序區為剩下的待排序記錄。
2、取無序區的第一個記錄插入到有序區的合適位置中。
3、重復以上操作直到無序區為空
下面我用具體的數組來演示一遍整體效果
假設有一組待排序數據:8、5、1、9、3
初始 [ 8 ] 5 1 9 3 <strong>中括號代表有序區</strong>
8 向 5 位置后移,5放在 8的前面
第一趟 排序 [ 5 8 ] 1 9 3
5 和 8 各后移一個位置 ,
第二趟排序 [ 1 5 8 ] 9 3
1、5 和 8 不移動,位置不變 ,9放在 8 后面
第三趟排序 [ 1 5 8 9 ] 3
5、8和 9各后移一個位置,1放在3 的前面
第四趟排序 [ 1 3 5 8 9 ]
得到最終結果 1 3 5 8 9
附上我的php代碼演示
<?php
$data = array(
1=>8,
2=>5,
3=>1,
4=>9,
5=>3
);
$lenth = count($data);
for($i=2; $i<=$lenth; $i++){
$data[0] = $data[$i];
for($j=$i-1; $data[0]<$data[$j]; $j--){
$data[$j+1] = $data[$j];
}
$data[$j+1] = $data[0];
}
unset($data[0]);
echo "<pre>";print_r($data);die;
?>
以上 使用 $data[0] 是為了防止 數組越界報錯使用的,并且充當哨兵的作用。
運行輸出如下
Paste_Image.png