Ein Mensch sortiert eine Menge von Objekten oft derart, dass er zuerst das kleinste Element aus der Menge heraussucht, danach das zweitkleinste, dann das drittkleinste und so weiter, bis er alle Elemente der Reihenfolge nach sortiert hat. Selectionsort folgt genau diesem Schema (wie auch gut im Video zu erkennen): das zu sortierende Feld wird von links nach rechts durchlaufen, wobei das kleinste Element herausgesucht wird; dieses wird im Anschluss ganz nach links sortiert; danach wird ab der zweiten Stelle im Feld nach dem zweitkleinsten Element gesucht und so weiter. Wenn wir das ganze als Code aufschreiben, erhalten wir folgenden Algorithmus:
(1) Selectionsort: a ∈ Nn → Nn:
(2) min ∈ N
(3) for i from 0 to n-1:
(4) min ← i
(5) for j from i+1 to n-1:
(6) if a[j] < a[min]:
(7) min ← j
(8) swap( a[i], a[min] )
(9) return a
Zum Codeverständnis am besten noch einmal Video und Code parallel anschauen; aber Achtung: der Tanz unterscheidet sich in einem kleinen Detail vom hier notierten Algorithmus (wer den Unterschied findet, kann ihn gerne in den Kommentaren erläutern).
Damit haben wir zwei der grundlegendsten Sortieralgorithmen kennengelernt. Sie sind nicht aufregend und nicht sonderlich effizient, aber aufgrund ihrer Einfachheit beliebte Kandidaten zur Erklärung von Programmierkonzepten. In zukünftigen Artikeln wird der Schwierigkeitsgrad aber etwas anheben und wir werden etwas komplexere Algorithmen anschauen; im Zuge dieser Artikel werden wir auch Begriffe wie Komplexität, Landau-Notation, stabiles Sortieren und in-place-Algorithmen kennenlernen – man darf also gespannt sein.
Übrigens: im Tanz zum Bubblesort-Algorithmus ist ein kleiner Fehler enthalten; wer ihn findet, gebe doch bitte in den Kommentaren über seine Erkenntnis Bescheid (ich möchte die Profi-Informatiker unter meinen Lesern bitten, sich mit der Auflösung wenigstens ein paar Tage zurückzuhalten, damit auch der “Nachwuchs” eine Chance bekommt).
Und vielleicht noch eine kleine Diskussionsaufgabe für die Kommentare: in welche Themen-Kategorie sollen nach Meinung der Leser die Artikel zum Thema Algorithmen und Datenstrukturen eingeordnet werden – “Technik” oder “Naturwissenschaften”? Oder doch ganz woanders hin?
Kommentare (23)