Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:sorting:quicksort:start [27.02.2023 15:24] – angelegt Frank Schiebel | faecher:informatik:oberstufe:algorithmen:sorting:quicksort:start [12.03.2025 17:20] (aktuell) – [Prinzip] Frank Schiebel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Quicksort ====== | ====== Quicksort ====== | ||
- | Ein weiterer, sehr effizienter Algorithmus zum Sortieren großer Datenmengen ist Quicksort. Auch Quicksort findet sich in zahlreichen aktuellen Bibliotheksimplementationen moderner Programmiersprachen wieder. Quicksort wurde ca. 1960 von C. Antony R. Hoare in seiner Grundform entwickelt und seitdem von andren | + | Ein weiterer, sehr effizienter Algorithmus zum Sortieren großer Datenmengen ist Quicksort. Auch Quicksort findet sich in zahlreichen aktuellen Bibliotheksimplementationen moderner Programmiersprachen wieder. Quicksort wurde ca. 1960 von C. Antony R. Hoare in seiner Grundform entwickelt und seitdem von anderen |
===== Prinzip ===== | ===== Prinzip ===== | ||
- | * (Man vermischt das Array aus hat Performanzgründen) | + | * (Man vermischt das Array aus Performanzgründen) |
- | * Man wählt das erste Element((das wegen des Mischvorgangs jetzt zuzällig | + | * Man wählt das erste Element((das wegen des Mischvorgangs jetzt zufällig |
- | * Anschließed | + | * Anschließend |
+ | ===== Teilen ===== | ||
+ | Im ersten Schritt teilt man das Array bezüglich eines Pivotelements in zwei Teile: Alle Elemente links des Pivotelements sollen kleiner sein als dieses, alle rechts davon größer. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Nun kann man (letztlich rekursiv) das Verfahren auf die beiden Teilarrays (im Bild orange, bzw. blau) erneut anwenden. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | Führe das Verfahren für beide Teilarrays von Hand erneut aus, ohne erneut zu mischen. Vollziehe für das orange Teilarray 3 weitere Teilungsvorgänge nach. Warum machen drei weitere Teilungen beim blauen Teilarray keinen Sinn? | ||
+ | |||
+ | ++++ Lösungshinweise | | ||
+ | |||
+ | {{ : | ||
+ | ++++ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | Implementiere im BlueJ-Projekt in der Klasse Quicksort die Methode '' | ||
+ | |||
+ | ===== Vom Teilen zum Quicksort ===== | ||
+ | |||
+ | Verfügt man über eine funktionale " | ||
+ | |||
+ | |||
+ | < | ||
+ | funktion sort(a, li, re) | ||
+ | falls li < re dann | ||
+ | | ||
+ | | ||
+ | | ||
+ | ende | ||
+ | ende | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A3) === | ||
+ | |||
+ | Was ist der Basisfall bei diesem Rekursionsaufruf? | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A4) === | ||
+ | |||
+ | Implementiere Quicksort in der Methode '' |