PHP 演算法02之插入排序

sheld發表於2019-02-16

描述

舉例4個數: 7,4,3,8

  1. 從左往右兩兩比較,即 7和4比較,發現7大於4,那麼交換,數列變成 4,7,3,8 。
  2. 然後我們再看第2位和第三位,發現7大於3,那麼交換,數列變成 4,3,7,8 。
  3. 然後再去看前兩位,左邊還是大於右邊,那麼繼續交換將變成 3,4,7,8 。
  4. 最後看第三位和第四位,發現左邊小於右邊,無需交換,最終是 3,4,7,8 。

總結一下就是從左到右依次選中一個數和左邊比較,這個數小於左邊就交換,交換完在和左邊比較,直到交換到比左邊大了之後,換下一個數,最後數字依次處理後,資料即從小到大排序。

程式碼

function insertSort($needSortData)
{
    $sortDataLength = count($needSortData); //計算出待排序元素數量
    for ($i = 1; $i < $sortDataLength; $i++) //外層遍歷每一個待排序元素,選第二個元素開始
    {
        for ($j = $i ; $j >0 ; $j--) 
        {//然後和前一個數比較,直到大於左側的數
            if ($needSortData[$j] < $needSortData[$j-1]) {
                //找到右側數小於左側數,那麼交換
                $temp = $needSortData[$j-1]; 
                $needSortData[$j-1]=$needSortData[$j];
                $needSortData[$j]=$temp;
            }
            else
            {
                //第一次發現左側數小於右側數了,說明該數已經排序完畢(因為再往左都是有序數了)
                //那麼 break 此次迴圈
                break;
            }
        }
    }
    return $needSortData;
}

$unSortedData = [9, 1, 3, 8, 2, 6, 5, 7, 4];
$result=insertSort($unSortedData);
print_r($result);

相關文章