Vorlesung Datenstrukturen

Ähnliche Dokumente
Kapitel 6 Elementare Sortieralgorithmen

JAVA - Suchen - Sortieren

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Grundlegende Sortieralgorithmen

Grundlagen der Programmierung

Grundlagen der Programmierung 2. Sortierverfahren

Programmieren I. Kapitel 7. Sortieren und Suchen

Vorlesung Datenstrukturen

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

Sortierverfahren für Felder (Listen)

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen 1

Abschnitt: Algorithmendesign und Laufzeitanalyse

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen

Suchen und Sortieren (Die klassischen Algorithmen)

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

10. Fortgeschrittene Programmiertechniken Fortgeschrittene Programmiertechniken

Einführung in die Informatik I Kapitel II.3: Sortieren

Einführung in die Informatik 2

Einstieg in die Informatik mit Java

Sortieralgorithmen. Jan Pöschko. 18. Januar Problemstellung Definition Warum Sortieren?... 2

Algorithmen & Programmierung. Rekursive Funktionen (1)

Vom Leichtesten zum Schwersten Sortieralgorithmen

Pro Informatik 2009: Objektorientierte Programmierung Tag 17. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

damit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".

Algorithmen und Datenstrukturen

Übersicht. Berechnung der Potenz für zwei ganze Zahlen Klausuraufgabe SS 2010! Berechnung der Cosinus-Funktion Klausuraufgabe WS 2010/2011!

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

1. Einführung. Was ist ein Algorithmus (eine Datenstruktur)? Welche Probleme kann man damit lösen? Warum betrachten wir (effiziente) Algorithmen?

Asymptotische Laufzeitanalyse: Beispiel

BUBBLE SORT. Können wir die gefundenen Algorithmen auch auf Listen mit mehr als drei Elementen ausdehnen?

2.3.1 Einleitung Einfache Sortierverfahren Höhere Sortierverfahren Komplexität von Sortierverfahren Spezielle Sortierverfahren

Folge 13 - Quicksort

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Einführung in die Informatik I

Algorithmen und Datenstrukturen

Teil III: Evaluationstest

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

Übungen zu Programmierung I - Blatt 8

Effizienz von Algorithmen

Termine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown

Uebersicht. Webpage & Ilias. Administratives. Lehrbuch. Vorkenntnisse. Datenstrukturen & Algorithmen

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

2. Felder (Arrays) 2.1 Suchen in Feldern. lineares Suchen: siehe Kapitel 1. Binäres Suchen. Vor.: Elemente (z.b. aufsteigend) sortiert

Algorithmen & Datenstrukturen 1. Klausur

Ausgewählte Algorithmen: Sortieren von Listen

Klausur Datenstrukturen und Algorithmen SoSe 2012

Überblick. Lineares Suchen

Bäume, Suchbäume und Hash-Tabellen

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Sortieralgorithmen. Vorlesung Algorithmen und Datenstrukturen 2. Prof. Dr. W. P. Kowalk Universität Oldenburg

Datenstrukturen & Algorithmen

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Kapitel 9 Suchalgorithmen

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

Sortieren Jiri Spale, Algorithmen und Datenstrukturen - Sortieren 1

Komplexität von Algorithmen

Kapitel 9 Algorithm. Geometrie. Kürzeste Abstände Konvexe Hülle

Programmiertechnik II

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Laufzeit und Komplexität

3.2. Korrektheit und Komplexität am Beispiel: Sortieren Sortieren ist eine wichtige Basis-Operation für komplexe Algorithmen

Einführung in die Informatik 2

12 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

Programmierung mit Feldern OOPM, Ralf Lämmel

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

11. Rekursion, Komplexität von Algorithmen

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Programmiertechnik II

Informatik I 4. Kapitel Suchen in sequentiellen Listen

Dynamisches Huffman-Verfahren

12. Rekursion Grundlagen der Programmierung 1 (Java)

Klausur Algorithmen und Datenstrukturen

Vorlesung Informatik 1

Algorithmen und Datenstrukturen 1-1. Seminar -

Kostenmaße. F3 03/04 p.188/395

Vorname:... Matrikel-Nr.:... Unterschrift:...

Algorithmen und Datenstrukturen

Grundlagen der Programmierung

Schulinternes Curriculum im Fach Informatik

11.1 Grundlagen - Denitionen

Randomisierte Algorithmen 2. Erste Beispiele

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Rekursive Funktionen

Informatik I 1. Kapitel. Einführung in Algorithmen und Datenstrukturen. Einführung in Algorithmen. Einführung in Algorithmen.

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

Transkript:

Vorlesung Datenstrukturen Sortieren von Feldern (2) Effiziente Sortieralgorithmen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 124

Quicksort Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 125

Funktionsprinzip Pivot-Element Wir wählen zunächst ein beliebiges Element des Feldes - das so genannte Pivot-Element. Partitionierung Das zu sortierende Feld wird in zwei virtuelle Felder aufgespaltet. Virtuell bedeutet, dass der Speicherplatz des ursprünglichen Feldes für die Teilfelder Verwendung findet. In das erste Teilfeld werden alle Elemente gebracht, deren Schlüssel kleiner oder gleich dem Schlüssel des Pivot-Elements ist. In das zweite Teilfeld werden alle Elemente gebracht, deren Schlüssel größer oder gleich dem Schlüssel des Pivot-Elements ist. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 126

Funktionsprinzip Rekursive Partitionierung der Teilfelder Die aus der Partitionierung resultierenden beiden Teilfelder werden rekursiv wieder nach dem gleichen Schema bearbeitet: Bestimmen eines Pivot-Elements Aufteilen der Elemente jedes Feldes auf die zwei (virtuellen) Teilfelder Terminierung der Rekursion Diesen Prozess führen wir so lange fort, bis nur noch einelementige Felder existieren, die nicht mehr sortiert werden müssen. An dieser Stelle endet der Algorithmus, da das ursprüngliche Feld nun sortiert ist. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 127

Quicksort - Pseudocode Quicksort(Feld) if ( Feldlänge > 1 ) Bestimme Pivot-Element P while ( es sind noch unzugeordnete Elemente im Feld ) Entnimm Element E aus Feld if E <= P Füge E in Teilfeld1 ein if E >= P Füge E in Teilfeld2 ein Quicksort( Teilfeld1 ) Quicksort( Teilfeld2 ) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 128

Wahl des Pivot-Elements Ziel der Partitionierung Die Leistungsfähigkeit von Quicksort steht und fällt mit der richtigen Auswahl des Pivot-Elements, denn Quicksort arbeitet am effizientesten, wenn jede Partitionierung zwei gleich große Teilfelder erzeugt. Konsequenz Wir müssen das Pivot-Element so bestimmen, dass die Anzahl der Elemente, die kleiner oder gleich dem Pivot-Element sind ungefähr der Anzahl an Elementen entspricht, die größer oder gleich dem Pivot-Element sind. Die ambivalente Zuordnung von Elementen, die gleich dem Pivot-Element sind, in entweder das linke oder das rechte Teilfeld ist beabsichtigt und geschieht mit der Zielstellung, die beiden Teilfelder möglichst gleich groß zu halten. Es existieren verschiedene Strategien, um das bestmögliche Pivot-Element zu bestimmen. Im Moment entscheiden wir uns für das jeweilige Element in der Mitte eines (Teil-)Feldes. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 129

Aufteilen der Elemente Realisierung der Partitionierung Nach der Bestimmung des Pivot-Elements müssen die Feldelemente geeignet auf die zwei Teilfelder verteilt werden. Da wir keine neuen Felder anlegen wollen und auch die Grenzen der beiden Teilfelder noch nicht kennen, vertauschen wir so lange Elemente im Feld, wie sich Datenkonstellationen finden lassen, bei denen ein Element mit kleinerem Index größer als das Pivot-Element und ein Element mit größerem Index kleiner als das Pivot-Element ist. Dazu lassen wir die beiden Feldgrenzen aufeinander zu laufen bis bei den beiden Elementen an den jeweiligen Grenzen eine Verletzung des Pivot-Kriteriums eintritt. Dann vertauschen wir die Elemente und wiederholen diesen Vorgang so lange, bis sich die Grenzen überschneiden. Die Feldposition, an der die Überschneidung auftritt, bestimmt sowohl die Grenze der beiden Teilfelder als auch die endgültige Position des Pivot-Elements. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 130

Quicksort - Vorbereitungen Vorbereitender Schritt Da wir die endgültige Position des Pivot-Elements im Vorhinein nicht kennen, vertauschen wir vor der Aufteilung der Elemente noch das erste Feldelement mit dem Pivot-Element, müssen diese Vertauschung nach der Aufteilung aber wieder rückgängig machen. Dazu vertauschen wir das Element an der ermittelten Grenzposition zwischen den Teilfeldern mit dem in der ersten Feldkomponente zwischengelagerten Pivot-Element. Vertauschen zweier Elemente Aus Gründen der Übersichtlichkeit lagern wir das Vertauschen in eine Funktion swap aus: void swap(elementtyp& a, Elementtyp& b) { Elementtyp temp = a; a = b; b = temp; } Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 131

Quicksort - Sortierung void quicksort(elementtyp data[], int first, int last) { if ((last-first) > 0) { // einelementige Felder sind schon sortiert int lower = first+1, upper = last; swap(data[first], data[(first+last)/2]); // Entnimm das Pivot-Element Elementtyp pivot = data[first]; while (lower <= upper) { while (data[lower] < pivot && lower < last)// Finde ein größeres Element lower++; // als das Pivot-Element im linken Teilfeld while (data[upper] > pivot) // Finde ein kleineres Element als das upper--; // Pivot-Element im rechten Teilfeld if (lower < upper) swap(data[lower++], data[upper--]); // Vertausche beide Elemente else lower++; } swap(data[upper], data[first]); // Schreibe Pivot-Element zurück quicksort(data, first, upper-1); // Sortiere linkes Teilfeld quicksort(data, upper+1, last); // Sortiere rechtes Teilfeld } } [nach Drozdek] Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 132

Performanz von Quicksort Die Leistungsfähigkeit von Quicksort hängt von der Wahl des Pivot-Elements und der daraus resultierenden Aufteilung der Elemente auf die beiden Teilfelder ab. Best Case Der Idealfall ist erreicht, wenn jede Partitionierung etwa gleich große Teilfelder liefert, d.h. aus einem Feld mit n Elementen werden im ersten Schritt zwei Teilfelder mit etwa n/2 Elementen, aus diesen dann 4 Teilfelder mit etwa n/4 Elementen usw. Folglich lässt sich die Anzahl an nötigen Vergleichen wie folgt abschätzen: n + 2 n 2 + 4 n 4 + 8 n 8 +...+ n n n = n(logn +1) Dies entspricht einer Laufzeit von O(n log n). Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 133

Performanz von Quicksort Die Leistungsfähigkeit von Quicksort hängt von der Wahl des Pivot-Elements und der daraus resultierenden Aufteilung der Elemente auf die beiden Teilfelder ab. Worst Case Im ungünstigsten Fall schränkt die Partitionierung die Feldgröße in jedem Rekursionsschritt immer nur um Eins ein, d.h. ein Teilfeld ist leer und das andere Teilfeld enthält außer dem Pivot-Element alle verbleibenden Elemente. Damit lässt sich die Anzahl an notwendigen Vergleichen wie folgt abschätzen: n 2 1 n 2 + n 3+ n 4 +...+1= i = (n 1)(n 2) 2 i=1 Dies entspricht einer Laufzeit von O(n 2 ). Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 134

Kriterien für die Wahl des Pivot-Elements Problem Wie soeben gezeigt, kann das Laufzeitverhalten von Quicksort schlimmstenfalls zu O(n 2 ) entarten. Ursache Letztendlich ist dafür eine dauerhaft falsche Auswahl des Pivot-Elements verantwortlich, so bewirkt etwa eine Selektion des kleinsten oder des größten Feldelements genau jene ungünstigste Partitionierung in ein leeres Teilfeld und ein Teilfeld mit allen Restelementen. Statistische Relevanz Leider kann man diese Situation nicht ignorieren, weil es eher unwahrscheinlich erscheint, immer das kleinste oder größte Feldelement als Pivot-Element zu selektieren, denn so führt z.b. die Anwendung von Quicksort auf ein bereits sortiertes Feld bei Verwendung des jeweils ersten oder letzten Feldelements als Pivot-Element zu eben dieser Situation. Unser Ansatz Wir wählen das Mittelelement um Probleme mit sortierten Feldern zu vermeiden. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 135

Wahl des optimalen Pivot-Elements Allgemeines Optimum Durch die Verwendung des Medians als Pivot-Element wird während der Partitionierung immer eine Halbierung des Feldes erreicht. Median Bezeichnet in der Statistik eine Grenze zwischen zwei Hälften. Der Median ist im Gegensatz zum arithmetischen Mittel robuster gegenüber Ausreißern. Theoretische Berechnung Prinzipiell lässt sich der Quicksort-Algorithmus um eine Medianberechnung erweitern. Dadurch wird der worst case verhindert und man erreicht generell eine Laufzeitkomplexität von O(n log n). Praktische Approximation Praktisch kostet die Medianberechnung zusätzliche Zeit (auch wenn wir in O(n log n) bleiben). Deshalb approximiert man diese Methode, indem man eine Stichprobe aus drei Elementen des Feldes entnimmt (z.b. das erste, das mittlere und das letzte) und aus dieser den Median bestimmt. Es gibt natürlich noch viele weitere Verfahren um Quicksort zu stabilisieren. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 136

Quicksort - Zusammenfassung Performanz im Average Case Trotz der beschriebenen Entartungen ist Quicksort in der Regel das schnellste Sortierverfahren. Empirische Untersuchungen haben gezeigt, dass es mindestens um den Faktor zwei schneller als irgendein anderes Verfahren ist. Hauptkriterium Die Leistung von Quicksort im Wesentlichen von der Wahl des Pivot-Elements abhängig. Hierbei muss jedoch ein Trade-off zwischen der schnellen Wahl eines möglicherweise ungünstigen Pivot- Elements und der langsamen Wahl des besten Pivot-Elements mit einkalkuliert werden. Ausnahme Für kleine Felder mit bis zu zehn Elementen ist Quicksort nicht der schnellste Algorithmus. Hierfür wäre z.b. InsertionSort geeigneter (auch zur Sortierung kleiner Felder innerhalb von Quicksort). Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 137

Mergesort Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 138

Mergesort Grundidee Geordnetes Einfügen (Verschmelzen) der Elemente zweier sortierter Hälften eines Feldes in ein Feld. Rekursion Da die geordneten Hälften ihrerseits sortiert werden müssen, teilt dieser Algorithmus beim Abstieg der Rekursion die jeweiligen Teilfelder so lange wieder in zwei Teilfelder, bis wir bei einelementigen (und damit implizit sortierten) Feldern angekommen sind. Diese werden dann beim rekursiven Aufstieg zu jeweils größeren sortierten Feldern verschmolzen. Pseudocode mergesort(data[]) if ( data[] enthält mindestens zwei Elemente ) mergesort ( linkes Teilfeld von data[] ) mergesort ( rechtes Teilfeld von data[] ) merge ( data[] ) // Verschmelze die Teilfelder geordnet Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 139

Das Verschmelzen Vorbemerkung Um nur mit einem Feld zu arbeiten, übergeben wir als Parameter die Grenzen des Feldes, dessen zwei sortierte Teilfelder noch verschmolzen werden müssen. Nichtsdestotrotz benötigen wir für den jeweiligen Verschmelzungsvorgang noch ein temporäres Feld, das die Dimensionen des durch die übergebenen Feldgrenzen definierten virtuellen Feldes aufweist. Pseudocode merge(data[], first, last) middle = (first + last) / 2; pos = 0; left = first; right = middle + 1; while (es sind noch Elemente in irgendeinem Teilfeld) if data[left] < data[right] // Element des linken Teilfelds ist kleiner als das des rechten temp[pos++] = data[left++]; // Füge Element des linken Teilfelds in temp[] ein else // sonst temp[pos++] = data[right++]; // Füge Element des rechten Teilfelds in temp[] ein Kopiere temp nach data Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 140

Performanzanalyse (1) Anzahl an Datenbewegungen In jedem Aufruf von merge() kopieren wir alle n Elemente des (jeweiligen) Feldes in das Temporärfeld und wieder zurück, d.h. die Anzahl der Bewegungen pro Aufruf beträgt 2n. Da Mergesort rekursiv definiert ist, können wir für die Anzahl aller Datenbewegungen M(n) analog feststellen, dass sich diese aus der Anzahl der Bewegungen eines Durchlaufs und der Gesamtzahl der Bewegungen der beiden Teilfelder ergibt, d.h. M(n) = 2M(n/2) + 2n. Die Rekursion bricht bei einelementigen Feldern ab, bei denen keine Datenbewegungen entstehen, da sie schon sortiert sind, d.h. M(1) = 0. Durch Einsetzen der jeweils nächst tieferen Rekursionsstufe und unter Beachtung der sich aus der jeweiligen Halbierung des Feldes ergebenden Rekursionstiefe i = log n mit n = 2 i lässt sich die Anzahl an Datenbewegungen explizit berechnen: " M(n) = 2M n % $ # 2& ' + 2n = 4M " n % $ # 4 & ' + 4n = 8M " n % $ # 8 & ' + 6n =... = 2 i M " n % $ # 2 ' + 2in = 2n log n i & Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 141

Performanzanalyse (2) Anzahl an Vergleichen In jedem Durchlauf von merge() vergleichen wir die n Elemente des jeweiligen Feldes miteinander, führen also n 1 Vergleichsoperationen durch. Analog der Berechnung der Datenbewegungen lässt sich die Gesamtzahl an Vergleichen C(n) ermitteln: C(n) = 2C(n/2) + n 1 wobei die Rekursion wieder bei Feldern mit einem Element ohne Vergleich endet, d.h. C(1) = 0: C(n) = 2 i C! " # n 2 i $ % & + in 2 i 1 = n log n n + 1 Konsequenz Mergesort weist ein allgemeines Laufzeitverhalten von O(n log n) auf. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 142

Vergleich der Verfahren Mergesort versus Quicksort Da Mergesort ebenfalls ein allgemeines Laufzeitverhalten von O(n log n) aufweist, befindet es sich in der gleichen Leistungsklasse wie Quicksort. MergeSort ist für das externe Sortieren geeignet. Aber Mergesort benötigt zusätzlichen Speicherplatz um das Mischen der sortierten Teilfelder zu ermöglichen. Wegen der zusätzlichen Verschiebungen ist Mergesort in der Praxis im Allgemeinen langsamer als Quicksort. Des Weiteren kann die Anwendung des Mergesort-Algorithmus bei sehr großen Datenmengen aufgrund des möglicherweise nicht zur Verfügung stehenden Speicherplatzes unmöglich sein. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 143

Praxistest: Average Case Zum Vergleich der tatsächlichen Leistungsfähigkeit verschiedener Sortierverfahren werden tatsächlich erzielte Laufzeiten (in Sekunden) der vorgestellten Algorithmen für zufällig verteilte Daten und verschiedene Feldgrößen einander gegenübergestellt: Feldgröße 10000 20000 40000 80000 InsertionSort 3,18s 13,51s 53,66s 226,62s Selection Sort 5,17s 22,03s 91,01s 366,30s BubbleSort 10,88s 45,09s 255,68s 747,15s Quicksort 0,05s 0,05s 0,05s 0,28s Mergesort 0,05s 0,11s 0,22s 0,49s Auch wenn diese Testergebnisse (nach Drozdek) nicht mehr ganz taufrisch sind, bestätigen sie doch ziemlich gut das theoretisch ermittelte Leistungsverhalten der einzelnen Verfahren. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 144

Praxistest: Best Case Zum Vergleich der tatsächlichen Leistungsfähigkeit verschiedener Sortierverfahren werden tatsächlich erzielte Laufzeiten (in Sekunden) der vorgestellten Algorithmen für aufsteigend sortierte Daten und verschiedene Feldgrößen einander gegenüber gestellt: Feldgröße 10000 20000 40000 80000 InsertionSort 0,00 0,00 0,00 0,05 Selection Sort 5,65 20,82 84,47 355,64 BubbleSort 5,22 20,87 87,55 366,91 Quicksort 0,00 0,00 0,06 0,11 Mergesort 0,00 0,11 0,16 0,49 Auch wenn diese Testergebnisse (nach Drozdek) nicht mehr ganz taufrisch sind, bestätigen sie doch ziemlich gut das theoretisch ermittelte Leistungsverhalten der einzelnen Verfahren. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 145

Praxistest: Worst Case Zum Vergleich der tatsächlichen Leistungsfähigkeit verschiedener Sortierverfahren werden tatsächlich erzielte Laufzeiten (in Sekunden) der vorgestellten Algorithmen für absteigend sortierte Daten und verschiedene Feldgrößen einander gegenüber gestellt: Feldgröße 10000 20000 40000 80000 InsertionSort 6,54 26,69 114,35 460,94 Selection Sort 5,55 22,41 90,96 381,13 BubbleSort 15,60 62,51 255,68 1034,02 Quicksort 0,00 0,05 0,05 0,17 Mergesort 0,06 0,11 0,22 0,44 Auch wenn diese Testergebnisse (nach Drozdek) nicht mehr ganz taufrisch sind, bestätigen sie doch ziemlich gut das theoretisch ermittelte Leistungsverhalten der einzelnen Verfahren. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 146

Ende der Vorlesung Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 147