faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Nächste ÜberarbeitungBeide Seiten, nächste Überarbeitung
faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:start [27.01.2022 08:19] sbelfaecher:informatik:oberstufe:algorithmen:sortieren:quicksort:start [31.01.2022 16:17] – [Arrays mit zwei oder mehr Elementen] sbel
Zeile 16: Zeile 16:
  
 Zunächst wählt man die erste Person als "Vergleichsgröße" aus, der Fachbegriff für das Element, das als Vergleichselement verwendet wird ist **Pivotelement**. Zunächst wählt man die erste Person als "Vergleichsgröße" aus, der Fachbegriff für das Element, das als Vergleichselement verwendet wird ist **Pivotelement**.
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:pivot01.drawio_1_.png |}}
 +
 +Jetzt teilt man das Problem in zwei Unterprobleme auf: Alle Schülerinnen die kleiner als das Pivotelement sind stellen sich links davon auf, alle die größer oder gleich sind rechts:
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:split01.drawio.png |}}
 +
 +Das Pivotelement scheidet jetzt aus dem Verfahren aus, es bleibt an dem Platz, an dem es sich jetzt befindet. Jetzt haben wir zwei "kleinere" Sortierprobleme geschaffen: Die Schülerinnen, die links setehen sind ungeordnet, die größeren auf der rechten Seite ebenfalls. Auf jeden Fall -- auch im ungünstigsten((welches ist der ungünstigste Fall?)) -- sind die neuen Teilproblem(e) kleiner als das ursprüngliche Problem.
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:teilprobleme.drawio.png |}}
 +
 +In den beiden Teilmengen verfährt man jetzt wie gerade in der Ausgangsmenge: 
 +
 +  * Pivotelement wählen (die erste Schülerin ganz links)
 +  * Menge in zwei Teile teilen: Kleiner und größer/gleich Pivotelement
 +
 +Dieses Vorgehen wird jetzt wiederholt bis der Basisfall eintritt.
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A1) ===
 +
 +Führe das Verfahren mit Stift und Papier zu Ende, bis du die Schüler nach Körpergröße sortiert hast.
 +
 +**Frage:** Was ist der Basisfall beim sortieren der Schülergruppen? Wann kannst du also direkt ohne weitere Überlegung eine sortierte Schülergruppe zurückgeben?
 +
 +++++ Antwort: | Leere Arrays und Arrays mit nur einem Element stellen den Basisfall dar. Du
 +kannst solche Arrays unverändert zurückgeben – es gibt nichts zu sortieren ++++
 +
 +===== Quicksort =====
 +
 +==== Leere Arrays und solche mit nur einem Element ====
 +
 +Wir legen den Basisfall zugrunde: Wenn unser Array leer ist oder nur ein Element hat, ist es sortiert und kann direkt als sortiertes Array zurückgegeben werden:
 +
 +<code java>
 +public ArrayList<Integer> quicksort(ArrayList<Integer> listToSort) {
 +   if(listToSort.size() < 2) {
 +     return listToSort;
 +   }
 +   [...]
 +}
 +</code>
 +
 +==== Arrays mit zwei oder mehr Elementen ====
 +
 +Arrays mit **zwei Elementen** sind ebenfalls einfach zu bearbeiten: Man muss lediglich die beiden Elemente vergleichen und wenn nötig vertauschen, bevor man das dann sortierte Array zurückgibt.
 +
 +Spannend wird es, wenn das Array drei Elemente hat:
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:qsortarray01.drawio.png |}}
 +
 +Wir gehen vor, wie oben angedacht: 
 +  * Pivotelement wählen (erstes Element des Arrays)
 +  * Partitionieren in //Elemente kleiner als Privot//, //Pivot// und //Elemente größer/gleich Pivot//:
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:partition01.drawio.png |}}
 +
 +Bislang haben wir als Pivotelemet stets einfach das erste Element des Arrays gewählt - tatsächlich ist es zunächst unerheblich, welches der Elemente man dazu heranzieht.
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A2) ===
 +Untersuche, ob die Auswahl des Pivotelements einen Einfluss auf das Ergebnis des Sortiervorgangs hat, indem du das Verafhren mit jedem der Elemente als Pivotelement durchführst.
 +
 +Das sortierte Array erhält man anschließend zuverlässig als:
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:sorted.drawio.png |}}
 +
 +
 +<WRAP center round tip 95%>
 +Wir können also Arrays mit 3 Elementen auf diese Weise sortieren, dabei spielt es keine Rolle, welches Element man als Pivotelement wählt.
 +</WRAP>
 +
 +
 +
 +
  • faecher/informatik/oberstufe/algorithmen/sortieren/quicksort/start.txt
  • Zuletzt geändert: 24.01.2024 16:34
  • von Marco Kuemmel