Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Sortierverfahren Richard Göbel.

Ähnliche Präsentationen


Präsentation zum Thema: "Sortierverfahren Richard Göbel."—  Präsentation transkript:

1 Sortierverfahren Richard Göbel

2 Sortierverfahren - Anwendungen
Sortierte Ausgabe von Daten Effiziente Algorithmen Suchen in sortierten Listen Vergleich von Elementen verschiedener Listen . . . und andere . . .

3 Sortierverfahren - Voraussetzung
Elemente müssen vergleichbar sein Zahlen Zeichenketten Allgemein: Totale Ordnung Eine Liste [x1, x2, , xn] ist sortiert g.d.w.:

4 Sortierverfahren - Comparator in Java
public MyComparator implements Comparator { public int compare(Object o1, Object o2) . . . } public boolean equals(Object obj)

5 Einfaches Sortierverfahren (Bubble Sort)
Überprüfe ob die Liste sortiert ist Falls die Sortierbedingung an einer Stelle verletzt ist, dann tausche die entsprechenden Elemente Wiederhole dieses Verfahren, bis die Liste sortiert ist Dieses Verfahren ist nicht effizient!

6 Effizientes Sortieren
Aufwand für Sortierverfahren: Vergleich von Elementen Einfügen von Elementen in eine sortierte Liste Ansatz: Verringere die Anzahl der Vergleichsoperationen Vermeide Verschieben einer Teilliste beim Einfügen

7 Sortieren - Ideen für ein Verfahren
Identifiziere schrittweise alle größten (kleinsten) Elemente einer Liste und speichere diese in ihrer Reihenfolge Teile und Beherrsche: Aufteilung der großen Liste in kleinere Listen Sortieren durch Fachverteilung

8 Sortieren - Größtes Element
Finde das größte Element der Liste Vertausche das größte Element mit dem letzten Element der Liste Setze das Verfahren mit der Liste ohne das letzte Element fort Endbedingung: Die Liste enthält nur noch ein Element

9 Sortieren - Finde Größtes Element, Insertion Sort
. . . max = list[0]; pos = 0; for (int i = 1; i < list.length; i++) { if (max < list[i]) max = list[i] pos = i; }

10 Sortieren - Diskussion Insertion Sort
Anzahl Vergleiche: n + (n -1) = (n2+n)/2 Es werden eine Vielzahl von Vergleichsoperationen bei jedem Durchgang wiederholt! Ein verbesserter Ansatz sollte Ergebnisse mindestens einiger Vergleiche speichern Ansatz hier: Aufbau einer entsprechenden Datenstruktur auf der Basis eines binären Baums

11 Binärer Baum als so genannter „Heap“
x1 x2 x3 x4 x5 x6 x7

12 Aufbau des Heap Bottom-Up: Tausche Element mit dem größten Nachfolger falls nötig Top-Down: Vertausche das eingefügte kleinere Element mit dem größten Nachfolger falls nötig (soweit wie nötig) Setze dieses Verfahren schrittweise bis zur Wurzel des Baumes fort

13 Aufbau des Heap - Bottom Up
Vertauschen! 1 2 Bis hier bereits fertig! 5 8 4 3

14 Aufbau des Heap - Top Down
1 8 4 3 2 5 4 2 Evtl. weiter nach unten

15 Darstellung des Heap - Idee
Für den Heap soll keine komplexe Darstellung aufgebaut werden Idee: Darstellung des Heap direkt auf dem Array Position i hat die Nachfolger: 2 * i 2 * i + 1

16 Darstellung des Heap - Beispiel
12 12 13 6 24 38 41 7 15 3 1 26 42 16 17 49 13 6 24 38 41 7 15 3 1 26 42 16 17 49

17 1: Baue den Heap auf einem Array der Länge n auf:
Heap Sort - Ansatz 1: Baue den Heap auf einem Array der Länge n auf: Bearbeite schrittweise die Positionen n/2 bis 1 Überprüfe die Nachfolger und vertausche ggf. Elemente (Bottom-Up, Top-Down) 2: Vertausche das erste Element (größtes Element) mit dem letzten Element des Arrays 3: „Blockiere“ das letzte Element (Array wird „virtuell“ um eine Position kleiner) 4: Wende den „Top-Down“-Ansatz auf das erste Element an 5: Wiederhole die Schritte bis das Array sortiert ist

18 Heap Sort - Diskussion Aufwand im schlechtesten Fall: O(log(n)*n)) Kein zusätzlicher Speicherplatz nötig

19 Teile und Beherrsche - Beliebige Aufteilung
Teile die Liste in zwei (fast) gleich große Teillisten Sortiere die Teilliste Erzeuge die Gesamtliste aus den sortierten Teillisten Vergleiche die beiden kleinsten Elemente der sortierten Teillisten Füge das kleinere Element in die Ergebnisliste Wiederhole diese Schritte, bis die beiden Teillisten leer sind Bezeichnung: Merge Sort

20 Aufwand im schlechtesten Fall: O(log(n)*n)) Vergleich mit Heap Sort:
Diskussion Merge Sort Aufwand im schlechtesten Fall: O(log(n)*n)) Vergleich mit Heap Sort: Zusätzlicher Speicher wird benötigt (mindestens in der Größe der zu sortierenden Liste) insgesamt etwas schneller als der Heap Sort

21 Teile und Beherrsche - Aufteilung mit Element
Wähle ein Element p für die Aufteilung aus (Pivot-Element) Erzeuge zwei Teillisten mit Hilfe von p: Die erste Teilliste enthält alle Elemente kleiner oder gleich p Die zweite Teilliste enthält alle Elemente größer als p Sortiere danach die Teilliste und hänge das Ergebnis zusammen Bezeichnung: Quick Sort

22 Quicksort - Sortieren innerhalb des Array
Parameter Startpunkt: links Endpunkt: rechts 14 25 16 27 41 12 . . . 25 Pivotelement: 12 27 16 25

23 Aufwand im durchschnittlichen Fall: O(log(n)*n))
Diskussion Quick Sort Aufwand im durchschnittlichen Fall: O(log(n)*n)) Aufwand im schlechtesten Fall: O(n2) Vergleich mit Heap Sort und Merge Sort: Kein zusätzlicher Speicher wird benötigt Im durchschnittlichen Fall deutlich schneller als die beiden anderen Verfahren

24 Sortierung durch Fachverteilung
Sortiere die Elemente direkt in die Felder eines Arrays ein (Für jeden Wert oder Wertbereich ein Feld) Aufwand ist linear! Probleme: Größe des Arrays? Mehrere Werte in einem Feld? Auslesen des Arrays?


Herunterladen ppt "Sortierverfahren Richard Göbel."

Ähnliche Präsentationen


Google-Anzeigen