Informatik Präsentationsleistung

Bubble Sort

Der klassische Bubble Sort ist wie ein geduldiger Lehrer, der immer wieder durch die Liste geht und benachbarte Elemente vertauscht, wenn sie in der falschen Reihenfolge stehen. Obwohl er langsam ist, ist er einfach zu verstehen und zu implementieren.

Shaker Sort

Shaker Sort ist die clevere Weiterentwicklung von Bubble Sort. Er arbeitet bidirektional - erst von links nach rechts, dann von rechts nach links. Diese Hin- und Her-Bewegung macht ihn effizienter als seinen einfacheren Verwandten.

Insertion Sort

Insertion Sort arbeitet wie ein Kartenspieler, der seine Karten sortiert. Er nimmt jedes Element und fügt es an der richtigen Stelle in den bereits sortierten Teil ein. Besonders effizient bei kleinen oder fast sortierten Listen.

Selection Sort

Selection Sort ist der methodische Perfektionist. Er sucht systematisch das kleinste Element und platziert es an der ersten Position, dann das zweitkleinste an die zweite Position und so weiter. Konstante Leistung, aber nicht die schnellste.

Merge Sort

Merge Sort folgt dem "Teile und Herrsche"-Prinzip. Er teilt die Liste rekursiv in kleinere Teile auf, sortiert diese und fügt sie dann geschickt wieder zusammen. Garantiert O(n log n) Leistung in allen Fällen.

Quick Sort

Quick Sort ist der Sprinter unter den Sortieralgorithmen. Er wählt ein Pivot-Element und partitioniert die Liste um dieses Element herum. Im Durchschnitt sehr schnell, aber im schlimmsten Fall kann er langsamer werden.

Live-Visualisierung
Editierbarer Code
Leistungsvergleiche

Bubble Sort

Der klassische Sortieralgorithmus

01

Zeitkomplexität

Bester Fall: O(n)
Durchschnitt: O(n²)
Schlechtester Fall: O(n²)
Speicherplatz: O(1)

Verwendung

  • Lernzwecke und Algorithmus-Verständnis
  • Sehr kleine Datensätze (< 10 Elemente)
  • Situationen wo Einfachheit wichtiger als Effizienz ist
  • Erkennung ob Liste bereits sortiert ist

Funktionsweise

1

Vergleiche benachbarte Elemente von links nach rechts

2

Vertausche sie, wenn das linke Element größer ist

3

Das größte Element "blubbert" nach rechts

4

Wiederhole für die verbleibenden Elemente

Python Implementation

Output:
Klicken Sie auf "Code ausführen" um das Ergebnis zu sehen...

Live Visualisierung

Vergleiche: 0 Vertauschungen: 0
64
34
25
12
22
11
90

Shaker Sort

Bidirektionale Bubble Sort Variante

02

Zeitkomplexität

Bester Fall: O(n)
Durchschnitt: O(n²)
Schlechtester Fall: O(n²)
Speicherplatz: O(1)

Verwendung

  • Verbesserung gegenüber Standard Bubble Sort
  • Listen mit Elementen an beiden Enden unsortiert
  • Kleine Datensätze mit bidirektionaler Unordnung
  • Lehrbeispiel für Algorithmus-Optimierung

Funktionsweise

1

Durchlaufe die Liste von links nach rechts

2

Dann durchlaufe sie von rechts nach links

3

Große Elemente wandern nach rechts, kleine nach links

4

Wiederhole bis keine Vertauschungen mehr nötig

Python Implementation

Output:
Klicken Sie auf "Code ausführen" um das Ergebnis zu sehen...

Live Visualisierung

Vergleiche: 0 Vertauschungen: 0
64
34
25
12
22
11
90

Insertion Sort

Einfügen in sortierte Sequenz

03

Zeitkomplexität

Bester Fall: O(n)
Durchschnitt: O(n²)
Schlechtester Fall: O(n²)
Speicherplatz: O(1)

Verwendung

  • Kleine Datensätze (< 50 Elemente)
  • Fast sortierte Listen
  • Online-Algorithmus (sortiert während Eingabe)
  • Hybrid-Algorithmen als Basis

Funktionsweise

1

Beginne mit dem zweiten Element

2

Vergleiche es mit Elementen links davon

3

Verschiebe größere Elemente nach rechts

4

Füge das Element an der richtigen Position ein

Python Implementation

Output:
Klicken Sie auf "Code ausführen" um das Ergebnis zu sehen...

Live Visualisierung

Vergleiche: 0 Vertauschungen: 0
64
34
25
12
22
11
90

Selection Sort

Auswahl des Minimums

04

Zeitkomplexität

Bester Fall: O(n²)
Durchschnitt: O(n²)
Schlechtester Fall: O(n²)
Speicherplatz: O(1)

Verwendung

  • Minimale Anzahl von Vertauschungen gewünscht
  • Speicher ist sehr begrenzt
  • Einfache Implementierung erforderlich
  • Kleine Datensätze mit konstanter Leistung

Funktionsweise

1

Finde das kleinste Element im unsortierten Teil

2

Vertausche es mit dem ersten unsortierten Element

3

Erweitere den sortierten Bereich um eine Position

4

Wiederhole bis alle Elemente sortiert sind

Python Implementation

Output:
Klicken Sie auf "Code ausführen" um das Ergebnis zu sehen...

Live Visualisierung

Vergleiche: 0 Vertauschungen: 0
64
34
25
12
22
11
90

Merge Sort

Teile und Herrsche Prinzip

05

Zeitkomplexität

Bester Fall: O(n log n)
Durchschnitt: O(n log n)
Schlechtester Fall: O(n log n)
Speicherplatz: O(n)

Verwendung

  • Große Datensätze mit garantierter Leistung
  • Stabile Sortierung erforderlich
  • Externe Sortierung (Dateien)
  • Parallelisierung möglich

Funktionsweise

1

Teile die Liste rekursiv in zwei Hälften

2

Sortiere jede Hälfte rekursiv

3

Füge die sortierten Hälften zusammen

4

Wiederhole bis die gesamte Liste sortiert ist

Python Implementation

Output:
Klicken Sie auf "Code ausführen" um das Ergebnis zu sehen...

Live Visualisierung

Vergleiche: 0 Vertauschungen: 0
64
34
25
12
22
11
90

Quick Sort

Pivot-basierte Partitionierung

06

Zeitkomplexität

Bester Fall: O(n log n)
Durchschnitt: O(n log n)
Schlechtester Fall: O(n²)
Speicherplatz: O(log n)

Verwendung

  • Allgemeine Sortierung (Standard in vielen Bibliotheken)
  • In-Place Sortierung gewünscht
  • Durchschnittlich sehr schnelle Leistung
  • Cache-effiziente Implementierung

Funktionsweise

1

Wähle ein Pivot-Element aus der Liste

2

Partitioniere die Liste um das Pivot

3

Sortiere die Teilbereiche rekursiv

4

Kombiniere die Ergebnisse

Python Implementation

Output:
Klicken Sie auf "Code ausführen" um das Ergebnis zu sehen...

Live Visualisierung

Vergleiche: 0 Vertauschungen: 0
64
34
25
12
22
11
90

Algorithmus-Vergleiche

Direkte Gegenüberstellung der Sortieralgorithmen in verschiedenen Kategorien

Bubble Sort vs. Shaker Sort

Vergleich der grundlegenden Austausch-Algorithmen

Grundidee

Bubble Sort

Vergleicht benachbarte Elemente und lässt große Werte nach rechts "blubbern". Arbeitet unidirektional von links nach rechts.

Shaker Sort

Erweitert Bubble Sort um bidirektionale Bewegung. Arbeitet abwechselnd von links nach rechts und rechts nach links.

Komplexität

Bubble Sort

Zeit: O(n²) in allen Fällen, Speicher: O(1). Benötigt mehr Durchläufe bei ungünstiger Datenverteilung.

Shaker Sort

Zeit: O(n²) in allen Fällen, Speicher: O(1). Oft weniger Durchläufe durch bidirektionale Optimierung.

Stabilität

Bubble Sort

Stabil - Gleiche Elemente behalten ihre relative Reihenfolge bei.

Shaker Sort

Stabil - Erhält ebenfalls die relative Reihenfolge gleicher Elemente.

Speicherbedarf

Bubble Sort

Konstanter Speicherbedarf O(1). Arbeitet in-place mit nur wenigen zusätzlichen Variablen.

Shaker Sort

Konstanter Speicherbedarf O(1). Benötigt zusätzliche Variablen für Grenzverwaltung, aber immer noch in-place.

Live-Demonstration

Bubble Sort
64
34
25
12
22
11
90
Vergleiche: 0 Vertauschungen: 0
Shaker Sort
64
34
25
12
22
11
90
Vergleiche: 0 Vertauschungen: 0

Insertion Sort vs. Selection Sort

Vergleich der elementaren Sortierverfahren

Grundidee

Insertion Sort

Baut schrittweise eine sortierte Sequenz auf, indem jedes neue Element an der richtigen Position eingefügt wird.

Selection Sort

Sucht wiederholt das kleinste Element im unsortierten Teil und platziert es am Anfang des sortierten Bereichs.

Komplexität

Insertion Sort

Zeit: O(n) bis O(n²), Speicher: O(1). Sehr effizient bei fast sortierten Listen.

Selection Sort

Zeit: Konstant O(n²), Speicher: O(1). Gleichmäßige Leistung unabhängig von der Eingabe.

Stabilität

Insertion Sort

Stabil - Gleiche Elemente werden in ihrer ursprünglichen Reihenfolge belassen.

Selection Sort

Instabil - Kann die relative Reihenfolge gleicher Elemente ändern.

Speicherbedarf

Insertion Sort

Konstanter Speicherbedarf O(1). Arbeitet in-place durch Verschieben von Elementen.

Selection Sort

Konstanter Speicherbedarf O(1). Minimale Anzahl von Vertauschungen, sehr speicherschonend.

Live-Demonstration

Insertion Sort
64
34
25
12
22
11
90
Vergleiche: 0 Vertauschungen: 0
Selection Sort
64
34
25
12
22
11
90
Vergleiche: 0 Vertauschungen: 0

Merge Sort vs. Quick Sort

Vergleich der effizienten Divide-and-Conquer Algorithmen

Grundidee

Merge Sort

Teilt die Liste rekursiv in Hälften, sortiert diese separat und fügt sie dann in sortierter Reihenfolge zusammen.

Quick Sort

Wählt ein Pivot-Element, partitioniert die Liste um dieses Element und sortiert die Teilbereiche rekursiv.

Komplexität

Merge Sort

Zeit: Garantiert O(n log n), Speicher: O(n). Konstante Leistung in allen Fällen.

Quick Sort

Zeit: O(n log n) durchschnittlich, O(n²) schlimmstenfalls, Speicher: O(log n). Sehr schnell im Durchschnitt.

Stabilität

Merge Sort

Stabil - Erhält die relative Reihenfolge gleicher Elemente durch sorgfältiges Zusammenführen.

Quick Sort

Instabil - Partitionierung kann die Reihenfolge gleicher Elemente ändern.

Speicherbedarf

Merge Sort

Linearer Speicherbedarf O(n). Benötigt zusätzlichen Speicher für das Zusammenführen der Teilarrays.

Quick Sort

Logarithmischer Speicherbedarf O(log n). Arbeitet in-place mit nur Rekursions-Stack-Speicher.

Live-Demonstration

Merge Sort
64
34
25
12
22
11
90
Vergleiche: 0 Vertauschungen: 0
Quick Sort
64
34
25
12
22
11
90
Vergleiche: 0 Vertauschungen: 0

Testhistorie

Übersicht der letzten 50 Vergleichstests mit detaillierten Leistungsmetriken

Gesamt: 0 Tests Heute: 0 Tests
Datum/Zeit Vergleich Algorithmus 1 Vergleiche 1 Vertauschungen 1 Algorithmus 2 Vergleiche 2 Vertauschungen 2 Gewinner
Noch keine Tests durchgeführt. Starten Sie einen Vergleich, um Daten zu sammeln.
Seite 1 von 1

Adaptive Hybrid Sort

Ein theoretischer Algorithmus für große, teilweise sortierte Listen mit vielen gleichen Werten und begrenztem Speicherplatz

Problemstellung

  • Riesige Liste mit Millionen von Elementen
  • Liste ist teilweise bereits sortiert
  • Viele gleiche Werte (hohe Redundanz)
  • Stark begrenzter Speicherplatz verfügbar
  • Stabilität der Sortierung erforderlich

Adaptive Hybrid Sort - Lösungsansatz

1
Analyse-Phase

Durchlaufe die Liste einmal und analysiere: Sortierungsgrad, Häufigkeit der Werte, und identifiziere bereits sortierte Bereiche (Runs).

2
Adaptive Strategie-Auswahl

Basierend auf der Analyse: Nutze Insertion Sort für kleine Runs, Tim Sort für teilsortierte Bereiche, und Counting Sort für Bereiche mit vielen Duplikaten.

3
Speicher-optimierte Verarbeitung

Verarbeite die Liste in Blöcken, die in den verfügbaren Speicher passen. Nutze externe Sortierung mit minimalen Merge-Operationen.

4
Intelligente Duplikat-Behandlung

Komprimiere gleiche Werte temporär zu (Wert, Anzahl)-Paaren, sortiere diese effizient und expandiere sie wieder.

5
Finale Merge-Phase

Führe die sortierten Blöcke mit einem k-way Merge zusammen, wobei ein Heap für die Merge-Reihenfolge verwendet wird.

Komplexitätsanalyse

Zeitkomplexität

O(n) bis O(n log n) je nach Eingabeeigenschaften. Bei stark vorsortierten Daten oder vielen Duplikaten nähert sich die Laufzeit O(n) an.

Speicherkomplexität

O(√n) für die Blockverarbeitung plus O(k) für den k-way Merge, wobei k die Anzahl der Blöcke ist. Konstant bezogen auf die Eingabegröße.

Stabilität

Vollständig stabil durch sorgfältige Implementierung aller Teilalgorithmen und der Merge-Operationen.

Adaptivität

Hochgradig adaptiv - passt sich automatisch an die Eigenschaften der Eingabedaten an und wählt die optimale Strategie.

Praktische Anwendungen

Big Data Processing

Sortierung großer Datensätze in verteilten Systemen mit begrenztem Arbeitsspeicher pro Knoten.

Datenbank-Systeme

Externe Sortierung für Index-Erstellung und Query-Optimierung bei großen Tabellen.

Embedded Systems

Sortierung in speicherbeschränkten Umgebungen wie IoT-Geräten oder Mikrocontrollern.

Log-File Analysis

Sortierung großer Log-Dateien mit vielen zeitlich geordneten Einträgen und wiederkehrenden Mustern.