Zum Inhalt springenSkip to content
Sortieralgorithmen

Insertion Sort

Baut links eine sortierte Teilfolge auf und fügt jedes neue Element an die richtige Stelle ein.

Schritt1von148
  • Vergleiche 0
  • Verschiebungen 0
  • Einsetzungen 0
  • sortierte Indizes 1
420
171
882
53
634
295
746
127
508
359
9110
2111
  • aktiv
  • Vergleich
  • Tausch
  • sortiert

Pseudocode

 1  for i from 1 to n - 1
 2    key = a[i]
 3    j = i - 1
 4    while j >= 0 and a[j] > key
 5      a[j + 1] = a[j]
 6      j = j - 1
 7    a[j + 1] = key

Schritt-Log

1Start.Zeile 1

Funktionsweise, Laufzeit und Speicher

Insertion Sort behandelt das Array wie einen Stapel Karten: links liegt der bereits sortierte Teil, rechts der unsortierte. In jedem Schritt nimmt der Algorithmus das erste unsortierte Element (den Key) und vergleicht es von rechts nach links mit allen Werten im sortierten Teil. Solange ein Wert größer als der Key ist, wird er um eine Position nach rechts geschoben. Sobald ein kleinerer Wert (oder der Anfang) erreicht ist, wird der Key in die entstandene Lücke gesetzt. Der sortierte Präfix wächst dadurch in jeder Iteration um eins. Im Best Case ist die Eingabe bereits sortiert und der innere Vergleich endet sofort, weshalb die Best-Case-Laufzeit linear ist (O(n)). Im Mittel und im Worst Case müssen pro Element bis zu i Werte verglichen und verschoben werden, was zu quadratischer Gesamtlaufzeit führt (O(n^2)). Insertion Sort arbeitet in-place und braucht nur konstant viel Zusatzspeicher (O(1)). Die Reihenfolge gleichwertiger Elemente bleibt erhalten, der Algorithmus ist also stabil.

Komplexität

  • Best CaseO(n)
  • Average CaseO(n^2)
  • Worst CaseO(n^2)
  • Zusatz-SpeicherO(1)

Wann verwenden?

Sehr stark bei kleinen Arrays mit weniger als rund 20 Elementen und bei nahezu sortierten Daten, wo die Laufzeit auf linear absinkt. Genau deshalb wechseln viele Hybrid-Sortierer wie Timsort intern auf Insertion Sort, sobald die rekursiven Teilbereiche klein genug sind.