Interaktive Demo

Selectionsort-Visualisierung

Selectionsort sucht das kleinste der übrigen Elemente und tauscht es nach vorne, eine Position nach der anderen. Er braucht wenige Schreibzugriffe, aber immer O(n²) Vergleiche.

Dein Browser unterstützt das HTML5-Canvas-Element nicht.

Egal welche Ausgangsreihenfolge: Selectionsort braucht für 11 Elemente immer dieselben 55 Vergleiche. Mit „Wenige verschiedene Werte“ zeigt sich, dass er nicht stabil ist.

Ablauf

Vergleiche
0
Schreibzugriffe
0

Array

Legende

  • Unsortiertes Element
  • Bisher kleinstes
  • Verglichenes Element
  • Endgültige Position

Laufzeit und Eigenschaften

Bester Fall

O(n²)

Auch ein sortiertes Array wird für jedes nächste Minimum komplett durchsucht.

Mittlerer Fall

O(n²)

Immer n(n − 1)/2 Vergleiche, unabhängig von der Eingabe.

Schlechtester Fall

O(n²)

Dieselben n(n − 1)/2 Vergleiche, aber nie mehr als n − 1 Vertauschungen.

Zusätzlicher Speicher

O(1)

Nur die Position des aktuellen Minimums wird gemerkt.

Stabil

Nein

Das Tauschen des Minimums nach vorne kann ein gleiches Element überspringen.

In-place

Ja

Elemente werden nur innerhalb des Arrays getauscht.

n ist die Anzahl der Elemente. O(n log n) ist das Beste, was ein Sortierverfahren auf Basis von Vergleichen erreichen kann.

Im Vergleich mit den anderen Sortieralgorithmen

AlgorithmusBester FallMittlerer FallSchlechtester FallZusätzlicher SpeicherStabilIn-place
BubblesortO(n)O(n²)O(n²)O(1)JaJa
Selectionsort diese SeiteO(n²)O(n²)O(n²)O(1)NeinJa
InsertionsortO(n)O(n²)O(n²)O(1)JaJa
ShellsortO(n log n)≈ O(n1.25)O(n1.5)O(1)NeinJa
TreesortO(n log n)O(n log n)O(n²)O(n)JaNein
TournamentsortO(n log n)O(n log n)O(n log n)O(n)JaNein
HeapsortO(n log n)O(n log n)O(n log n)O(1)NeinJa
SmoothsortO(n)O(n log n)O(n log n)O(1)NeinJa
MergesortO(n log n)O(n log n)O(n log n)O(n)JaNein
PatiencesortO(n)O(n log n)O(n log n)O(n)JaNein
TimsortO(n)O(n log n)O(n log n)O(n)JaNein
BlocksortO(n)O(n log n)O(n log n)O(1)JaJa
QuicksortO(n log n)O(n log n)O(n²)O(log n)NeinJa
IntrosortO(n log n)O(n log n)O(n log n)O(log n)NeinJa
FluxsortO(n)O(n log n)O(n log n)O(n)JaNein
CrumsortO(n)O(n log n)O(n log n)O(log n)NeinJa

1. Minimum suchen

Vom Anfang des unsortierten Teils an wird jedes übrige Element mit dem bisher kleinsten verglichen.

2. Nach vorne tauschen

Das kleinste Element wird an den Anfang des unsortierten Teils getauscht. Dort steht es an seiner endgültigen Position, und der unsortierte Teil schrumpft um eins.

3. Wenig schreiben, viel vergleichen

Selectionsort braucht nie mehr als n − 1 Vertauschungen, das hilft, wenn Schreiben teuer ist. Er kann aber nicht früher aufhören: Selbst ein sortiertes Array kostet n(n − 1)/2 Vergleiche.