Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:sortieren:start [24.01.2022 22:09] – [Wann ist ein Array sortiert?] sbel | faecher:informatik:oberstufe:algorithmen:sortieren:start [03.03.2024 14:36] (aktuell) – Marco Kuemmel | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
- | + | | |
- | < | + | * [[.bubblesort:start|Bubblesort]] |
- | + | | |
- | Es gibt verschiedene Sortierverfahren, | + | * [[.insertionsort:start|Insertionsort]] |
- | + | | |
- | // | + | |
- | </ | + | |
- | + | ||
- | Sortierverfahren werden mit zunehmender Zahl der zu sortierenden Elemente schnell sehr komplex. Aus diesem Grund eignen sich Algorithmen | + | |
- | + | ||
- | ====== Sortieren ====== | + | |
- | + | ||
- | Der Mistkäfer Willi möchte Ordnung in seine Mistkugelsammlung bringen. | + | |
- | Am liebsten hätte er sie schön der Grösse nach sortiert, die kleinste Kugel | + | |
- | links, die grösste rechts. Leider hat Willi keine Ahnung, wie er das | + | |
- | anstellen könnte. Er setzt sich auf eine der Mistkugeln und überlegt, aber | + | |
- | es fällt ihm keine Lösung ein. | + | |
- | + | ||
- | Da wählt er in seinem Frust zufällig zwei | + | |
- | Mistkugeln aus, bei denen die Reihenfolge nicht stimmt, und vertauscht die | + | |
- | beiden. Willi ist natürlich klar, dass er damit seine Kugelreihe noch lange | + | |
- | nicht sortiert hat. In seiner wachsenden Verzweiflung wählt er ein weiteres Kugelpaar, das | + | |
- | nicht richtig geordnet ist, und vertauscht auch dieses. | + | |
- | + | ||
- | Diesen Vorgang wiederholt er nun | + | |
- | laufend. Nach vielen solchen Vertauschungen stutzt Willi plötzlich: Er findet kein einziges | + | |
- | "falsches" | + | |
- | einer Weile schaut er auf und betrachtet die Reihe seiner Mistkugeln...((Diese Geschichte und weitere Ideen der Einführung sind dem Skript der ETH Zürich entnommen)) | + | |
- | + | ||
- | + | ||
- | ====== Wozu sortieren wir? ====== | + | |
- | + | ||
- | In unserer welt sind allemöglichen Sachen sortiert: Rechnungen, Adressen, Kleider, Bankbelege, Personen und vieles mehr. Wozu eigentlich? | + | |
- | + | ||
- | Logisch: Sortieren erleichtert das Wiederfinden. Ein Telefonbuch, | + | |
- | + | ||
- | <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe**> | + | |
- | {{ .folder_tools.png|}} | + | |
- | Beschreibe den Unterschied zwischen einem Inhaltsverzeichnis und dem Index eines | + | |
- | Buches bezüglich der Reihenfolge der Einträge. | + | |
- | </ | + | |
- | + | ||
- | ====== Sortierkriterien ====== | + | |
- | + | ||
- | Das **Kriterium**, | + | |
- | + | ||
- | Wie man am Beispiel des Telefonbuchs sieht, gibt es auch kombinierte Sortierkriterien: Die | + | |
- | Einträge sind in erster Linie nach der Ortschaft sortiert, innerhalb einer Ortschaft nach Name, bei gleichen Namen nach Vorname. | + | |
- | <box 90% round #f4ffc3 #e7f5aa #e7f5aa # | + | |
- | {{ .:folder_tools.png|}} | + | |
- | In welcher Reihenfolge stehen folgende Namen im Telefonbuch? | + | |
- | + | ||
- | * Heinrich Vonberg | + | |
- | * Hubert Vogel | + | |
- | * Franziska Völker | + | |
- | * Marian Völkermann | + | |
- | * Uwe Vockler | + | |
- | * Hans-Herrmann Vollenbirker | + | |
- | * Mark von Salis | + | |
- | * Wilhelm Vogel | + | |
- | </ | + | |
- | ===== Vergleichbarkeit ===== | + | |
- | + | ||
- | Um eine Liste nach einem bestimmten Kriterium sortieren zu können, müssen je zwei | + | |
- | Elemente gemäss diesem Kriterium mit einander **verglichen** werden können. Von zwei | + | |
- | beliebigen Elementen muss entscheidbar sein, welches das grössere bzw. das kleinere ist. | + | |
- | Natürlich gibt es auch den Fall der Gleichheit zweier Elemente. | + | |
- | + | ||
- | Diese Vergleichbarkeit ist z.B. bei Zahlen selbstverständlich. Bei Buchstaben ebenfalls, da | + | |
- | gilt die alphabetische Ordnung. Der Vergleich zweier Buchstabenfolgen (also Wörter) gemäss | + | |
- | alphabetischer Ordnung ist hingegen schon etwas komplizierter. | + | |
- | + | ||
- | Um dieses Problem etwas zu entschärfen, | + | |
- | + | ||
- | <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe**> | + | |
- | {{ | + | |
- | + | ||
- | Welche Probleme ergeben sich, wenn man eine Schulklasse nach | + | |
- | + | ||
- | + | ||
- | * Haarfarbe | + | |
- | * Geschlecht | + | |
- | * Hobbies | + | |
- | + | ||
- | sortieren möchte? | + | |
- | </ | + | |
- | ===== Sortierrichtung ===== | + | |
- | + | ||
- | Man kann für jedes Kriterium, nach dem sortiert werden soll (und kann) die Richtung der Sortierung festlegen: // | + | |
- | + | ||
- | ====== Sortierte Arrays ====== | + | |
- | + | ||
- | Im folgenden ist ein unsortiertes Array zu sehen. Die Reihenfolge der Elemente ist durch den Index (in eckigen Klammern) festgelegt, der Wert der jeweiligen Array-Variablen durch die Zuweisung: | + | |
- | + | ||
- | int[] zahlen = new int[5]; | + | |
- | | + | |
- | zahlen[1]=3 | + | |
- | zahlen[2]=15 | + | |
- | | + | |
- | zahlen[4]=12 | + | |
- | + | ||
- | Nun die sortierte Variante: | + | |
- | + | ||
- | zahlen[0]=3 | + | |
- | zahlen[1]=5 | + | |
- | | + | |
- | zahlen[3]=12 | + | |
- | zahlen[4]=15 | + | |
- | + | ||
- | Die Werte sind nun aufsteigend sortiert, die Reihenfolge noch immer durch den Index gegeben. Analog kann man bei Java mit ArrayLists verfahren. | + | |
- | + | ||
- | ===== Wann ist ein Array sortiert? ===== | + | |
- | + | ||
- | + | ||
- | **Ein Array ist sortiert, wenn es keine zwei Elemente mit falscher Reihenfolge gibt.** | + | |
- | + | ||
- | Es ist leicht einzusehen, dass auch die folgende Aussage richtig ist: **Ein Array ist sortiert, wenn es keine zwei benachbarten Elemente mit falscher Reihenfolge gibt.** | + | |
- | + | ||
- | ====== Musik-Liste ====== | + | |
- | + | ||
- | Arbeite mit dem folgenden BlueJ Projekt: https:// | + | |
- | + | ||
- | Das Projekt implementiert eine ArrayList mit Musiktiteln, | + | |
- | + | ||
- | <box 90% round #f4ffc3 #e7f5aa #e7f5aa # | + | |
- | {{ .: | + | |
- | * Lade das Projekt herunter, öffne und teste es. | + | |
- | </ | + | |
- | + | ||
- | Weiter zu [[BubbleSort]] | + |