[PHP] Jak wykonać sortowanie przez zamianę/wymianę/wybór (algorytm Selection Sort)?
Chcesz wykorzystać do sortowania algorytm SelectionSort.
To bardzo prosty algorytm, który nadaje się do sortowania niewielkich tablic. Polega na znajdowaniu najmniejszego elementu w tablicy i zamianie tego elementu z aktualnym w pętli.
Algorytm wykorzystuje dwie pętle for, w których przegląda zawartość tablicy. Pierwsza służy do przemieszczania się po kolejnych elementach tablicy, a druga odnajduje najmniejszy element tablicy w pozostałych elementach.
Gdy zostanie znaleziony najmniejszy element, jest on zamieniany z aktualnym (stąd nazwa algorytmu), a więc zawartość tablicy od razu jest porządkowana od najmniejszego do największego elementu.
<?
$t = array(1, 9, 7, 2, 6, 7, 3);
$n = count($t); // liczba elementów tablicy
for ($i=0;$i<$n;$i++) {
$min = $i;
for ($j=$i;$j<$n;$j++) if ($t[$min]>$t[$j]) $min = $j;
list($t[$i],$t[$min]) = array($t[$min],$t[$i]);
}
for($i=0;$i<$n;$i++) echo $t[$i],", ";
// wynik: 1, 2, 3, 6, 7, 7, 9,
?>
Pierwsza iteracja szuka najmniejszego elementu w całej tablicy, druga iteracja zaczyna poszukiwanie od drugiego elementu, trzecia iteracja szuka od trzeciego elementu, itd.
Wymiana elementów tablicy została wykonana przy pomocy triku z list() i array(), bez potrzeby korzystania ze zmiennej tymczasowej.