In diesem Tutorial erkläre ich euch, wie man einen sogenannten „Bubblesort“ in PHP mit einem Array realisiert. Der Bubblesort ist eine Sortier-Funktion, welche Schritt für Schritt die Elemente überprüft und von kleiner nach größer sortiert. Man nennt dies auch in der Fachsprache auf Deutsch „Blasensortierung“. Der Prozess wird auch als „Aufsteigendes Blasen“ bezeichnet, da die größeren Elemente an die Oberfläche steigen und kleinere Elemente nach unten sinken.
Beispiele, wo ein Bubblesort verwendet wird:
- Beim Sortieren einer Liste von Anzeigen in einer Online-Kleinanzeige.
- Beim Sortieren von Einträgen in einem Adressbuch.
- Sortieren von Ergebnissen in einer absteigenden Reihenfolge nach Punktzahl bei einem Spiel.
- Beim Sortieren einer Liste von Namen, alphabetisch.
Um den Bubblesort zu realisieren, verwende ich eine PHP Funktion, die Array-Elemente mit zwei For-Schleifen durchläuft. In diesen Schleifen prüfe ich mit einer IF Anweisung, ob das Element größer ist als das vorhergehende.
Nachfolgend das Beispiel:
<?php
/**
* @author Nico Schubert
* @copyright Copyright © 2011, Nico Schubert
*/
function bubblesort($bubblesort_array = array ()) {
$anz = count($bubblesort_array);
$temp='';
for ($a = 0; $a < $anz; $a++) {
for ($b = 0; $b < $anz -1; $b++) {
if ($bubblesort_array[$b +1] < $bubblesort_array[$b]) {
$temp = $bubblesort_array[$b];
$bubblesort_array[$b] = $bubblesort_array[$b +1];
$bubblesort_array[$b +1] = $temp;
}
}
}
return $bubblesort_array;
}
$bubblesort_array[]='14';
$bubblesort_array[]='8';
$bubblesort_array[]='12';
$bubblesort_array[]='1';
echo 'Ausgabe des unsortierten Array:';
echo '<pre>';
print_r($bubblesort_array);
echo '</pre>';
echo 'Ausgabe des sortierten Array:';
echo '<pre>';
print_r(bubblesort($bubblesort_array));
echo '</pre>';
?>
Die Ausgabe würde folgendermaßen aussehen:
Ausgabe mit print_r(), des unsortierten Array:
Array ( [0] => 14 [1] => 8 [2] => 12 [3] => 1 )
Ausgabe des sortierten Array:
Array ( [0] => 1 [1] => 8 [2] => 12 [3] => 14 )
Erklärung:
Die Funktion bubblesort() nimmt ein Array als Parameter entgegen und sortiert es anschließend mittels des Bubblesort-Algorithmus. Der Algorithmus verteilt sich auf zwei verschachtelte Schleifen.
In der ersten Schleife wird die Anzahl der Elemente im Array bestimmt und in die Variable $anz gespeichert. Die Variable $temp dient als temporäre Variable, um das Element zu speichern, das zwischen zwei Array-Elementen getauscht wird. In der zweiten Schleife wird über jedes Element des Arrays iteriert und mit dem jeweils nächsten Element verglichen. Ist das nächste Element kleiner als das vorherige, werden beide miteinander vertauscht. Dieser Vorgang wird so lange wiederholt, bis alle Elemente des Arrays in der richtigen Reihenfolge liegen.
Im Anschluss wird das sortierte Array zurückgegeben und in der Variablen $bubblesort_array gespeichert.
Ich empfehle euch auch noch alternativ den Beitrag zur: „Sortierung von Arrays“ euch anzusehen. Dort werden noch andere Möglichkeiten vorgestellt. Solltet ihr noch die ein oder andere Frage haben, so meldet euch einfach im Forum.