做法
把未排序的元素,在已排序的陣列裡頭,從後向前比對,找到相應的位置後插入。
實作
原始陣列。
1 | $items = [75, 18, 53, 94, 31]; |
首先把陣列的第 2 個値 18
設為準備插入値。
1 | $i = 1; |
先做一次比較迴圈,如果準備插入値小於比較値(準備插入値的前一個値),就把比較値複製到後面一個位置,並且停止迴圈。
1 | for ($j = $i - 1; $j >= 0 && $temp < $items[$j]; $j--) { |
輸出:
1 | Array ( [0] => 75 [1] => 75 [2] => 53 [3] => 94 [4] => 31 ) |
再把比較値的位置改為準備插入値 18
。
1 | $items[$j + 1] = $temp; |
輸出:
1 | Array ( [0] => 18 [1] => 75 [2] => 53 [3] => 94 [4] => 31 ) |
這樣的判斷做 4 遍,也就是 (n-1)
次,就可以得到:
1 | // Array ( [0] => 75 [1] => 18 [2] => 53 [3] => 94 [4] => 31 ) |
因此最終可寫為:
1 | function insertionSort($items) { |