直接插入排序的基本操作就是將一個記錄有序的插入到已有的有序表中,從而得到一個新的記錄數增加1的有序表。
一、直接插入排序就是在邏輯上將一個數插入到已有的有序表中,所以我們需要一個輔助空間。
二、代碼實現(PHP版本)
function insert(&$list)
{
$count = count($list) - 1;
$tmp = null;//哨兵
for ($i = 1; $i <= $count; $i++) {
if ($list[$i] < $list[$i - 1]) {
$tmp = $list[$i];//將小的放在哨兵的位置
for ($j = $i - 1; $j >= 0 && $list[$j] > $tmp; $j--){ //往後移
$list[$j + 1] = $list[$j];
}
$list[$j+1] = $tmp;
}
}
三、時間複雜度分析
最好的情況:數據有序,則需要比較n-1次,無需移動
最壞的情況:數據逆序,則需要比較2+3+4+5+...n = (n+2)*(n-1)/2次,移動次數也達到最大值爲(n+4)*(n-1)/2次
如果排序記錄是隨機的,那麼根據概率相同原則,平均比較和移動次數約爲n²/4,因此直接插入排序的時間複雜度爲O(n的²)