kapitel 5.6: quicksort - tu braunschweig · 5.6 quicksort grundideen: • divide and conquer •...
TRANSCRIPT
![Page 1: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/1.jpg)
Prof. Dr. Sándor Fekete
Kapitel 5.6: Quicksort
Algorithmen und Datenstrukturen WS 2019/20
�1
![Page 2: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/2.jpg)
5.6 QuicksortGrundideen: • Divide and Conquer• Jeweils Aufteilung in zwei Teilarrays• Rekursiv: Sortieren der Teilarrays• Kein Merge-Schritt!• Stattdessen Aufteilung der Teilarrays
anhand eines “Pivot”-Elements, das die Menge in kleinere und größere Elemente teilt.• Balance der Aufteilung vorher nicht
absehbar.
�2
![Page 3: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/3.jpg)
�3
![Page 4: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/4.jpg)
5.61 Ablauf Quicksort
�4
![Page 5: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/5.jpg)
�5
5.61 Ablauf Quicksort
![Page 6: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/6.jpg)
�5
5.61 Ablauf Quicksort
![Page 7: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/7.jpg)
INPUT: Subarray von A=[1,...,n], der bei Index p beginnt und bei Index r endet, d.h. A[p,...,r]OUTPUT: Sortierter Subarray
Algorithmus 5.14
5.6.2 Algorithmische Beschreibung
�6
![Page 8: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/8.jpg)
INPUT: Subarray von A=[1,...,n], d.h. A[p,...,r]
OUTPUT: Zwei Subarrays A[p,...,q-1] und A[q+1,...,r] mit A[i]≤A[q] und A[q]<A[j] für i=p,...,q-1 und j=q+1,...,r
Subroutine 5.15
�7
![Page 9: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/9.jpg)
5.6.3 Laufzeit von Quicksort
Wie viele Schritte benötigt Quicksort für einen Array der Länge n?
Unterscheidung: • Worst Case• Best Case• Average Case
�8
![Page 10: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/10.jpg)
Bester Fall: Pivot liegt genau in der Mitte, d.h. nach PARTITION haben beide Teilarrays i.W. die Länge n/2.
Man sieht, z.B. mit dem Mastertheorem:
�10
5.6.3 Quicksort: Laufzeit
![Page 11: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/11.jpg)
Das funktioniert auch noch, wenn PARTITION ein annähernd balanciertes Ergebnis liefert:
Man sieht wieder mit dem Mastertheorem:
�11
5.6.3 Quicksort: Laufzeit
![Page 12: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/12.jpg)
�12
5.6.3 Quicksort: Laufzeit
![Page 13: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/13.jpg)
Satz 5.13 (Durchschnittliche Laufzeit von Quicksort)Für einen n-elementigen Array A hat Quicksort eine erwartete Laufzeit von O(n log n).
�13
5.6.3 Quicksort: Laufzeit
![Page 14: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/14.jpg)
Warum interessiert das?
* 1981* 1987
Sebastian Wild Zlatan Ibrahimovic
�14
5.6.3 Quicksort: Laufzeit
![Page 15: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/15.jpg)
* 1987
Sebastian Wild
Warum interessiert das?
�15
5.6.3 Quicksort: Laufzeit
![Page 16: Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer • Jeweils Aufteilung in zwei Teilarrays • Rekursiv: Sortieren der Teilarrays • Kein](https://reader033.vdocuments.net/reader033/viewer/2022051903/5ff456511b8c5e3354203e12/html5/thumbnails/16.jpg)
* 1987
Sebastian Wild “Best Paper Award”
Warum interessiert das?
�15
5.6.3 Quicksort: Laufzeit