Interaktive Demo

Insertionsort-Visualisierung

Insertionsort funktioniert wie das Sortieren von Spielkarten auf der Hand: Er nimmt ein Element nach dem anderen und fügt es an der richtigen Stelle in den sortierten Teil ein. Bei fast sortierten Arrays ist er sehr schnell.

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

Probiere „Fast sortiert“: Nur wenige Elemente müssen sich bewegen. „Umgekehrt“ ist der schlechteste Fall.

Ablauf

Vergleiche
0
Schreibzugriffe
0

Array

Legende

  • Unsortiertes Element
  • Sortierter Teil
  • Einzufügendes Element
  • Verglichenes Element
  • Endgültige Position

Laufzeit und Eigenschaften

Bester Fall

O(n)

Schon sortiert: Jedes Element braucht nur einen Vergleich, um zu bleiben, wo es ist.

Mittlerer Fall

O(n²)

Im Mittel rückt jedes Element an der Hälfte des sortierten Teils vorbei.

Schlechtester Fall

O(n²)

Umgekehrte Reihenfolge: Jedes Element muss am ganzen sortierten Teil vorbei.

Zusätzlicher Speicher

O(1)

Nur das einzufügende Element wird zur Seite gelegt.

Stabil

Ja

Elemente rücken nur an größeren vorbei, nie an gleichen.

In-place

Ja

Elemente werden innerhalb des Arrays verschoben.

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
SelectionsortO(n²)O(n²)O(n²)O(1)NeinJa
Insertionsort diese SeiteO(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. Ein Element herausnehmen

Der sortierte Teil beginnt mit dem ersten Element. Das nächste Element wird herausgenommen, dadurch entsteht eine Lücke im Array.

2. Größere Elemente verschieben

Nach links durch den sortierten Teil wird jedes größere Element eine Stelle nach rechts in die Lücke geschoben. Die Lücke wandert dabei nach links.

3. Einfügen

Beim ersten Element, das nicht größer ist, fällt das herausgenommene Element in die Lücke. Bei fast sortierten Arrays passiert das fast sofort, deshalb nutzen viele schnelle Sortieralgorithmen Insertionsort für kleine Teile.