Sortieralgorithmen

Agenda

  • Intro
  • Selection Sort
  • Bubble Sort
  • Insertion Sort
  • Quick Sort
  • Merge Sort

Intro

Was ist Sortieren?

Neuordnung eines gegebenen Arrays oder einer Liste von Elementen nach einem Vergleichsoperator für die Elemente

Alle Elemente werden entweder in aufsteigender oder in absteigender Reihenfolge neu angeordnet.

Begriffe

  • In-place sorting
  • Internal Sorting
  • External Sorting
  • Stable Sorting
  • Unstable Sorting

Stable und Unstable Sorting

  • 🃅 🃕 🂲 🂪 → Input
  • 🂲 🃅 🃕 🂪 → Stabil
  • 🂲 🃕 🃅 🂪 → Unstabil

Ein stabiler Sortieralgorithmus verändert nicht die ursprüngliche Reihenfolge der 5er-Karten

Anwendungen von Sortieralgorithmen

  • Suchalgorithmen
  • Datenbankoptimierung
  • Datenanalyse
  • Betriebssysteme

Selection Sort

Funktionsweise

Beim Selection Sort wird wiederholt das kleinste Element aus dem unsortierten Teil der Liste ausgewählt und in den sortierten Teil der Liste verschoben.

Beispiel: 69, 27, 11, 28, 2

Theoretisches Konzept

  • Man setzt den Index auf Low
  • Man durchsucht den restlichen Teil des Arrays nach dem kleinsten Element
  • Man tauscht das kleinste Element mit dem Element am Index
  • Index inkrementieren und wiederholen solange, bis alle Elemente sortiert sind.

Demo - Selection Sort

Performance

  • Zeitkomplexität: O(N²)
  • Speicherkomplexität: O(1)

Zusammenfassung

  • Einfach zu implementieren
  • Nicht stabil

Bubble Sort

Funktionsweise

Beim Bubble Sort wird wiederholt das größte Element aus dem unsortierten Teil der Liste in den sortierten Teil der Liste verschoben.

Beispiel: 69, 27, 11, 28, 2

Theoretisches Konzept

  • Man setzt den Index auf Low
  • Man durchläuft den unsortierten Teil des Arrays
  • Ist das aktuelle Element am Index größer als das nächste Element, werden Sie getauscht.
  • High dekrementieren und wiederholen solange, bis alle Elemente sortiert sind.

Demo - Bubble Sort

Performance

  • Zeitkomplexität: O(N²)
  • Speicherkomplexität: O(1)

Zusammenfassung

  • Einfach zu implementieren
  • Stabil

Insertion Sort

Funktionsweise

Beim Insertion Sort wird wiederholt das nächste Element aus dem unsortierten Teil der Liste in die richtige Stelle des sortierten Teils der Liste verschoben.

Beispiel: 69, 27, 11, 28, 2

Theoretisches Konzept

  • Man setzt den sortedHighIndex auf Low + 1
  • Man durchläuft den unsortierten Teil des Arrays
  • Ist das aktuelle Element am Index kleiner als das vorherige Element, werden Sie getauscht.
  • sortedHigh dekrementieren und wiederholen solange, bis Element an der richtigen Stelle sortiert ist

Demo - Insertion Sort

Performance

  • Zeitkomplexität: O(N²)
  • Speicherkomplexität: O(1)

Zusammenfassung

  • Einfach zu implementieren
  • Stabil

Quick Sort

Allgemein

  • Divide and Conquer
  • Rekursiv

Funktionsweise

Beim Quick Sort wird wiederholt der Input am freiwählbaren Pivotindex aufgeteilt. Jedes Element wird mit dem Pivotelement verglichen. Ist es kleiner als das Pivotelement wird es in den linken Teil verschoben, ansonsten in den rechten Teil.

Anschließend wird zuerst der linke Teil danach der rechte Teil sortiert.

Beispiel: 10, 80, 30, 90, 40, 50, 70

Theoretisches Konzept

  • Base Case: Nur noch 1 Element übrig → return;
  • Pre Recurse: Aufteilen des Arrays in Links und Rechts
  • Recurse: linke Seite anschließend rechte Seite

Demo - Quick Sort

Performance

  • Zeitkomplexität: O(N²)
  • Speicherkomplexität: O(1)

Zusammenfassung

  • Effizient bei großen Datenmengen O(N log N)
  • Nicht stabil

Merge Sort

Allgemein

  • Divide and Conquer
  • Rekursiv

Funktionsweise

Beim Merge Sort wird wiederholt der Input in der Mitte aufgeteilt.

Anschließend wird zuerst der linke Teil danach der rechte Teil sortiert.

Anschließend werden der linke und der rechte Teil zusammengeführt.

Beispiel: 69, 27, 11, 28, 2

Theoretisches Konzept

  • Base Case: Nur noch 1 Element übrig → return;
  • Pre Recurse: Aufteilen des Arrays in Links und Rechts
  • Recurse: linke Seite anschließend rechte Seite
  • Post Recurse: linke Seite und rechte Seite zusammenführen

Demo - Merge Sort

Performance

  • Zeitkomplexität: O(N log N)
  • Speicherkomplexität: O(N)

Zusammenfassung

  • Effizient bei großen Datenmengen O(N log N)
  • Stabil
  • Speicherbedarf is Hoch
  • Kein In-Place Sort

Vergleich Sortieralgorithmen

AlgorithmusBest Average Worst
Selection SortO(N²)O(N²)O(N²)
Bubble SortO(N)O(N²)O(N²)
Insertion SortO(N)O(N²)O(N²)
Quick SortO(N log N)O(N log N)O(N²)
Merge SortO(N log N)O(N log N)O(N log N)

Merge Sort hat eine Speicherkomplexität von O(N)

Rest of the day

  • Demo Code verstehen, debuggen, implementieren (Optional)
  • Sort mit eigenem Problem (Optional)