Sortierverfahren - Definition und Beispiel
Algorithmen, die eine Menge von unabhängigen Elementen in bestimmte Reihenfolge bringen
Auf der Menge ist strenge, schwache Ordnung definiert (“kleiner gleich”)
Sortierverfahren - Besonderheiten
zugrundeliegende Datenstruktur: Felder oder verkettete Listen
Laufzeitkomplexität: Anzahl Vergleichs- und Vertauschungsoperationen in Abhängigkeit der Problemgröße
Zusätzlicher Speicherbedarf
in-place: nur Speicher der Eingabedaten verwendet
out-of-place: zusätzlicher Speicher benötigt
Stabilität: Erhalt der relativen Reihenfolge von Elementen, die bzgl. der Ordnung gleichwertig sind
instabil
stabil
Elementare Sortierverfahren
Definition
Beispiele
einfache Verfahren
dienen als Grundlage komplizierterer Verfahren und zu Lehrzwecken
vergleichsbasiert, prüft relative Ordnung zweier Elemente
durchschnittliche Laufzeit: 0(n2)
Insertionsort
Selectionsort
Bubblesort
Sortieren durch Auswählen
Suche kleinstes (bzw. größtes) Element
Vertausche es mit dem ersten Element im unsortierten Bereich
schrittweise Erweiterung des sortierten Bereichs
Sortieren durch Einfügen
Definieren des ersten Elements als “sortiert”
Einfügen jedes weiteren Werts an richtige Stelle in sortierten Bereich
Sortieren durch Aufsteigen
Vergleiche von links nach rechts zwei Nachbarelemente und vertausche, falls Reihenfolge inkorrekt
Wiederhole solange, bis keine Vertauschung mehr nötig
Unsortierter Bereich wird bei jeder Wiederholung von rechts um ein Element verkleinert
Welches elementare Sortierverfahren würden Sie in folgenden Situationen auswählen?
Eingabedaten bereits gut vorsortiert
Vertauschen zweier Elemente sehr aufwändig
Zu sortierende Elemente liegen nicht vollständig vor, sondern erhalten schrittweise neue Elemente, die einsortiert werden müssen
a) Insertionsort
b) Selectionsort
c) Bubblesort
Asymptotisch optimale Sortierverfahren
vergleichsbasiert
durchschnittliche Laufzeit: 0(n log n) - sehr schnell
asymptotisch optimal
Quicksort
Mergesort
Heapsort
Mergesort - Funktionsweise
nutzt Teile-und-Herrsche Prinzip
Aufteilen des zu sortierenden Datensatzes in zwei kleinere Datensätze, die individuell sortiert werden
Verschmelzen der sortierten, kleinen Datensätze
rekursive Anwendung (ggf. erneute Aufteilung der kleineren Datensätze)
speicherintensiv
Quicksort - Funktionsweise
Wählen eines Pivotelements
Partitionierung des Datensatzes anhand des Pivotelements
alle kleineren Elemente nach links, alle größeren nach rechts
rekursive Anwendung
speichersparend
Quicksort - Eigenschaften
gutes Allzweckverfahren
Komplexität: 0(n log n)
Laufzeit steigt in Richtung 0(n2), wenn
Partitionierung dauerhaft asymmetrisch
Werte sich nur wenig unterscheiden
Quicksort - Optimierungen
iterative Implementierung
Steigerung der Partitionssymmetrie
Kombination mit Insertionsort
kleinere Teilfelder ignorieren
mit Insertionsort sortieren
Heapsort - Funktionsweise
Verwendung von binärem Heap als zentrale Datenstruktur
Ablauf
Eingabearray in gültige (Max-)Heap-Reihenfolge bringen
Vertauschen des Wurzel Elements (=größtes Element) mit letztem Element
Der um ein Element verkleinerte Heap korrigiert
Ergebnis: sortiertes Feld von Elementen
Welches asymptotisch optimale Sortierverfahren würden Sie in folgenden Situationen auswählen?
a) Die Eingabedaten enthalten viele gleiche Werte
b) Anwendung hat harte Echtzeitanforderungen (Ergebnis muss immer nach fester Laufzeit vorliegen)
c) Eingabedaten weisen mehrere Schlüsselelemente auf, nach denen mehrstufig sortiert werden soll (Bsp. Adressbuch)
d) Nur wenig bzw. teurer Speicherplatz zur Verfügung
A) Quicksort
B) Quicksort
C) Mergesort
D) Heapsort
Nicht-vergleichsbasierte Sortierverfahren
basiert nicht auf direktem Vergleich zweier Elemente
Unter Ausnutzung bestimmter Eigenschaften der zu sortierenden Daten lassen sich in einigen Fällen Sortierverfahren entwickeln, die schneller als asymptotisch optimale Sortierverfahren sind
Countingsort
Bucketsort
Radixsort
Countingsort - Funktionsweise
nicht vergleichs-, sondern adressbasiert
ermöglicht Sortieren mit linearer Laufzeit, die von Länge der Eingabe n und Anzahl der möglichen Werte k abhängt
anwendbar, wenn Sortierschlüssel natürliche Zahlen aus einem beschränktem Intervall mit k möglichen Werten sind
Zählen der Vorkomnisse der Schlüsselwerte
Berechnung der Adresse bzw. Position im sortierten Array
Einfügen der Werte an der richtigen Position
Bucketsort - Funktionsweise
anwendbar, wenn Sortierschlüssel reele Zahlen aus beschränktem intervall
Laufzeit: abhängig von Verteilung der Schlüsselwerte in der Eingabe
Verteilung der Elemente auf die Eimer
Sortierung der Elemente innerhalb der Eimer mit beliebigem (optimalem) Sortierverfahren
Zusammenfügen der Inhalte der Eimer
Radixsort - Funktionsweise
nicht-vergleichsbasiertes Sortierverfahren, das auf Countingsort oder Bucketsort basiert
anwendbar, wenn Schlüssel bekannte maximale Länge l aufweisen
Erstelle einen Behälter für jeden möglichen Wert der Basis
Für jede Stelle des Schlüssels, beginnend mit der letzten Stelle
Verschiebe jedes Element der Liste in den entsprechenden Behälter
Entnehme die Elemente aus dem Behälter und hänge sie der Liste an. Durchlaufe die Behäklter entsprechend der Sortierfunktion
Radixsort - Beispiel
Welches nicht-vergleichsbasierte Sortierverfahren würden Sie in folgenden Situationen auswählen?
a) Sortierung aller Studenten Deutschlands nach ihrem Notenschnitt
b) Sortierung aller Einwohner Deutschlands nach ihrem Alter in Jahren
c) Sortierung aller Städte und Gemeinden Deutschlands nach ihrem Namen
a) Bucket Sort?
b) Counting Sort
c) lexikographisch
Zuletzt geändertvor 2 Jahren