Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
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:05] – sbel | faecher:informatik:oberstufe:algorithmen:sortieren:quicksort:start [31.01.2022 16:16] – [Arrays mit zwei oder mehr Elementen] sbel | ||
---|---|---|---|
Zeile 10: | Zeile 10: | ||
===== Modellvorstellung ===== | ===== Modellvorstellung ===== | ||
+ | |||
+ | Stell dir vor die Schüler der 7a wollen sich wie die Orgelpfeifen der Größe nach geordnet aufstellen: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Zunächst wählt man die erste Person als " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Das Pivotelement scheidet jetzt aus dem Verfahren aus, es bleibt an dem Platz, an dem es sich jetzt befindet. Jetzt haben wir zwei " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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/ | ||
+ | |||
+ | Dieses Vorgehen wird jetzt wiederholt bis der Basisfall eintritt. | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (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? | ||
+ | |||
+ | ++++ 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< | ||
+ | | ||
+ | | ||
+ | } | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 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, | ||
+ | |||
+ | Spannend wird es, wenn das Array drei Elemente hat: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Wir gehen vor, wie oben angedacht: | ||
+ | * Pivotelement wählen (erstes Element des Arrays) | ||
+ | * Partitionieren in //Elemente kleiner als Privot//, //Pivot// und //Elemente größer/ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Bislang haben wir als Pivotelemet stets einfach das erste Element des Arrays gewählt - tatsächlich ist es zunächst unerheblich, | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (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: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||