Menu
Coddy logo textTech

Selection Sort

Zuletzt aktualisiert

Selection Sort teilt das Array in einen sortierten Bereich links und einen unsortierten Bereich rechts. In jedem Durchlauf durchsucht es den unsortierten Bereich nach dem kleinsten Element und tauscht es dann an die erste unsortierte Position - wodurch der sortierte Bereich um eins wächst. Drücke oben auf Abspielen, um das Durchsuchen und Tauschen zu beobachten, oder gehe Vergleich für Vergleich durch.

Selection Sort führt unabhängig von der Eingabe stets die gleiche Anzahl an Vergleichen aus, aber höchstens n-1 Vertauschungen - weit weniger als Bubble Sort - was zählt, wenn Schreibvorgänge teuer sind.

Zeit- und Speicherkomplexität

FallKomplexitätAnmerkungen
Bester FallO(n²)Vergleiche erfolgen selbst bei sortierter Eingabe
DurchschnittsfallO(n²)Zufällige Reihenfolge
Schlechtester FallO(n²)Umgekehrt sortiert
SpeicherO(1)In-place
StabilNeinVertauschungen können gleiche Elemente umordnen

Schritt für Schritt

SchrittWas passiert
1Betrachte das gesamte Array als unsortiert.
2Durchsuche den unsortierten Bereich nach dem minimalen Element.
3Tausche dieses Minimum an die erste unsortierte Position.
4Verschiebe die Grenze um eine Stelle nach rechts (diese Position ist nun sortiert).
5Wiederhole, bis nur noch ein Element unsortiert ist.

Durchgerechnetes Beispiel

Sortieren von [5, 2, 4, 1]:

DurchlaufArrayAktion
Start[5, 2, 4, 1]Das gesamte Array ist unsortiert.
1[1, 2, 4, 5]Durchsuche [5, 2, 4, 1], das Minimum ist 1 an Index 3; tausche mit Index 0.
2[1, 2, 4, 5]Durchsuche [2, 4, 5], das Minimum ist 2 bereits an Index 1; tauscht mit sich selbst.
3[1, 2, 4, 5]Durchsuche [4, 5], das Minimum ist 4 bereits an Index 2; keine Bewegung nötig.
Fertig[1, 2, 4, 5]Nur noch 5 übrig, es ist also bereits an seinem Platz.

Wann Selection Sort verwenden

Verwende es, wennVermeide es, wenn
Schreibvorgänge teuer sind - es macht höchstens n-1 Vertauschungen.Das Array groß ist - die O(n²) Vergleiche dominieren.
Du eine einfache, leicht zu implementierende In-place-Sortierung brauchst.Du eine stabile Sortierung brauchst, die die Reihenfolge gleicher Schlüssel bewahrt.
Der Speicher knapp ist - es nutzt nur O(1) zusätzlichen Speicher.Die Daten fast sortiert sind - es kann nicht wie Insertion Sort früher enden.
Der Datensatz winzig ist und vorhersagbare Leistung zählt.Der Durchsatz zählt - O(n log n)-Sortierungen wie Quicksort sind weit schneller.

Selection Sort-Code

Eine saubere, lauffähige Selection Sort-Implementierung in Python, JavaScript, Java, C++, C. Wähle eine Sprache, kopiere den Code oder öffne ihn vorgeladen im Coddy-Playground.

Selection Sort-Code in Python

Python
1def selection_sort(a):2    n = len(a)3    for i in range(n - 1):4        # Find the smallest element in the unsorted tail5        min_idx = i6        for j in range(i + 1, n):7            if a[j] < a[min_idx]:8                min_idx = j9        a[i], a[min_idx] = a[min_idx], a[i]10    return a11
12
13nums = [64, 25, 12, 22, 11]14print("Before:", nums)15selection_sort(nums)16print("After: ", nums)
Führe diesen Code im Python-Playground aus

Selection Sort FAQ

Wie ist die Zeitkomplexität von Selection Sort?
Selection Sort ist in allen Fällen O(n²) - bester, durchschnittlicher und schlechtester Fall - weil es stets den gesamten unsortierten Bereich durchsucht, um jedes Minimum zu finden. Es benötigt O(1) zusätzlichen Speicher.
Ist Selection Sort stabil?
Die standardmäßige In-place-Version ist nicht stabil, weil das Tauschen eines entfernten Minimums an seine Position ein gleiches Element an einem anderen vorbeischieben kann. Eine stabile Variante existiert, erfordert aber Verschieben statt Tauschen.
Wann ist Selection Sort nützlich?
Es ist nützlich, wenn die Kosten für das Schreiben in den Speicher hoch sind, da es höchstens n-1 Vertauschungen ausführt - das Minimum, das für eine vergleichsbasierte Sortierung möglich ist, die Elemente bewegt.
Was ist der Unterschied zwischen Selection Sort und Bubble Sort?
Beide sind O(n²)-Vergleichssortierungen, aber Selection Sort macht höchstens n-1 Vertauschungen, während Bubble Sort bis zu O(n²) Vertauschungen ausführen kann. Bubble Sort kann außerdem ein bereits sortiertes Array erkennen und früher stoppen, während Selection Sort immer alle Durchläufe ausführt.
Sollte ich Selection Sort oder Insertion Sort verwenden?
In den meisten Fällen ist Insertion Sort vorzuziehen - es ist stabil, läuft bei fast sortierten Daten in O(n) und ist im Durchschnitt schneller. Wähle Selection Sort nur, wenn das Minimieren der Anzahl an Schreibvorgängen Priorität hat, da es höchstens n-1 Vertauschungen garantiert.
Warum läuft Selection Sort selbst bei einem sortierten Array immer in O(n²)?
Selection Sort kann nicht wissen, dass ein Element bereits das Minimum ist, ohne den Rest des unsortierten Bereichs zu durchsuchen, daher führt es unabhängig von der Eingabereihenfolge in jedem Durchlauf alle Vergleiche aus. Deshalb entspricht der beste Fall dem schlechtesten bei O(n²) - anders als Insertion oder Bubble Sort, die abkürzen können.
Coddy programming languages illustration

Meistere Algorithmen mit Coddy

LOS GEHT'S