[PHP] Jak wykonać sortowanie przez zamianę/wymianę/wybór (algorytm Selection Sort)?

0x01 graphic

Chcesz wykorzystać do sortowania algorytm SelectionSort.

0x01 graphic

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.