數據結構之直接插入排序---PHP版

直接插入排序的基本操作就是將一個記錄有序的插入到已有的有序表中,從而得到一個新的記錄數增加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的²)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章