做法
首先在未排序的陣列中找到最小的元素,然後移動到已排序陣列的末端。
實作
原始陣列。
1
| $items = [33, 75, 26, 5, 51];
|
一開始假定最小値是 33
。
先做一次迴圈。
1 2 3 4 5
| for ($j = $i + 1; $j < count($items); $j++) { if ($items[$min] > $items[$j]) { $min = $j; } }
|
把記錄最小値位置的參數 $min
輸出分別是:
因此得知最小値是 5
,就可以把 5
和 33
做交換。
1 2 3
| $temp = $items[$min]; $items[$min] = $items[$i]; $items[$i] = $temp;
|
這樣的判斷做 4 次,也就是 (n-1)
次,就可以得到:
1 2 3 4 5 6 7 8
| Array ( [0] => 5 [1] => 75 [2] => 26 [3] => 33 [4] => 51 )
Array ( [0] => 5 [1] => 26 [2] => 75 [3] => 33 [4] => 51 )
Array ( [0] => 5 [1] => 26 [2] => 33 [3] => 75 [4] => 51 )
Array ( [0] => 5 [1] => 26 [2] => 33 [3] => 51 [4] => 75 )
|
最終可寫為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function selectionSort($items) { for ($i = 0; $i < count($items) - 1; $i++) { $min = $i;
for ($j = $i + 1; $j < count($items); $j++) { if ($items[$min] > $items[$j]) { $min = $j; } }
$temp = $items[$min]; $items[$min] = $items[$i]; $items[$i] = $temp; }
return $items; }
|
程式碼