Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer •...

17
Prof. Dr. Sándor Fekete Kapitel 5.6: Quicksort Algorithmen und Datenstrukturen WS 2019/20 1

Transcript of Kapitel 5.6: Quicksort - TU Braunschweig · 5.6 Quicksort Grundideen: • Divide and Conquer •...

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

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

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

�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

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

�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

�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

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

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

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

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

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

�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

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

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

* 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

* 1987

Sebastian Wild “Best Paper Award”

Warum interessiert das?

�15

5.6.3 Quicksort: Laufzeit