Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Rekursion mit Listen: Quicksort

Ähnliche Präsentationen


Präsentation zum Thema: "Rekursion mit Listen: Quicksort"—  Präsentation transkript:

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


Herunterladen ppt "Rekursion mit Listen: Quicksort"

Ähnliche Präsentationen


Google-Anzeigen