Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Rekursion mit Listen: Quicksort
Diskrete Mathematik I Vorlesung 4a Rekursion mit Listen: Quicksort
2
Übersicht Das Prinzip der Rekursion Beispiel 2: QuickSort
1 Übersicht Das Prinzip der Rekursion Beispiel 2: QuickSort „Teile und Herrsche“ Programmkonstrukte von Java Quicksort: Umsetzung in Java Funktion „QuickSort“
3
Das Prinzip der Rekursion
2 Das Prinzip der Rekursion Eine rekursive Definition reduziert ein Problem auf ein kleineres Problem derselben Art. Eine rekursive Funktion setzt eine rekursive Definition in ein Programm um.
4
Beispiel 2: QuickSort einer der schnellsten Sortieralgorithmen
3 Beispiel 2: QuickSort einer der schnellsten Sortieralgorithmen Grundidee: „Teile und Herrsche“ (“divide and conquer“) - ein wichtiges Paradigma für geometrische Algorithmen ein rekursiver Algorithmus mit einer rekursiven Datenstruktur
5
Sortierliste A mit n Elementen
4 „Teile und Herrsche“ Sortierliste A mit n Elementen Wahl eines Wertes W der Liste A 8x
6
„Teile und Herrsche“ W Konstruktion einer Partitionierung der Liste A
4 „Teile und Herrsche“ W Konstruktion einer Partitionierung der Liste A 8x
7
4 „Teile und Herrsche“ K G W alle Elemente von K sind <= W (noch unsortiert) alle Elemente von G sind >= W (noch unsortiert) Sortieren von K und G durch Rekursion A 8x
8
Funktion „QuickSort“ Liste QuickSort (Liste InList) {
5 Funktion „QuickSort“ Liste QuickSort (Liste InList) { if(InList.IstLeer()) return new Liste(); int W = InList.Kopf().GibWert(); Liste NewInList = InList.Body(); Liste K = NewInList.Kleiner(W); Liste G = NewInList.Groesser(W); Liste K1 = QuickSort(K); Liste G1 = QuickSort(G); K1.FuegeAn(W); K1.Concat(G1); return K1; } lokale Variablen K W G
9
Methoden der Klasse "Liste"
6 Methoden der Klasse "Liste" class Liste { void FügeAn(int an) {..} boolean IstLeer(){return kopf == null;} Element Kopf() {return kopf;} Liste Body() { Liste NeueListe = new Liste(); NeueListe.kopf = kopf.GibWeiter(); NeueListe.fuß = fuß; return NeueListe;} . Fortsetzung nächste Seite
10
Methoden der Klasse "Liste" (Fortsetzung)
7 Methoden der Klasse "Liste" (Fortsetzung) Liste Kleiner(int H){ Liste NeueListe = new Liste(); Element zeiger = kopf; while(zeiger != null){ if(zeiger.GibWert() =< H) NeueListe.FügeAn(zeiger.GibWert()); zeiger = zeiger.GibWeiter();} } Liste Groesser(int H){...} void Concat(Liste ZweiteListe){ ... als Übungsaufgabe ....
11
Methoden der Klasse "Liste"
8 Methoden der Klasse "Liste" Element Kopf(): liefert das erste Element (Kopf) der Liste Liste Body(): liefert Rumpf der Liste Liste Groesser(int v): liefert eine neue Liste mit Elementen, die größer als v sind Liste Kleiner(int v): Liefert eine neue Liste mit Elementen, die kleiner als v sind boolean IstLeer(): liefert true, wenn Liste leer ist, sonst false void FügeAn(int v): fügt ein Element mit dem Wert v am Ende der Liste an void Concat(Liste L): Verbindet die Liste mit der Liste L
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.