Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:sortieren:start [24.01.2022 23:09] – [Wann ist ein Array sortiert?] sbel | faecher:informatik:oberstufe:algorithmen:sortieren:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Sortieren ====== | ||
- | |||
- | |||
- | < | ||
- | |||
- | Es gibt verschiedene Sortierverfahren, | ||
- | |||
- | //Quelle: [[http:// | ||
- | </ | ||
- | |||
- | Sortierverfahren werden mit zunehmender Zahl der zu sortierenden Elemente schnell sehr komplex. Aus diesem Grund eignen sich Algorithmen zum Sortieren sehr gut, um über die Effizienz eines Verfahrens nachzudenken - es gibt viel Optimierungspotential. | ||
- | |||
- | ====== 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 | ||
- | " | ||
- | 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: | ||
- | 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 #e7f5aa |**Aufgabe**> | ||
- | {{ .: | ||
- | 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[0]=7 | ||
- | zahlen[1]=3 | ||
- | zahlen[2]=15 | ||
- | zahlen[3]=5 | ||
- | zahlen[4]=12 | ||
- | |||
- | Nun die sortierte Variante: | ||
- | |||
- | zahlen[0]=3 | ||
- | zahlen[1]=5 | ||
- | zahlen[2]=7 | ||
- | 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 #e7f5aa |**Aufgabe**> | ||
- | {{ .: | ||
- | * Lade das Projekt herunter, öffne und teste es. | ||
- | </ | ||
- | |||
- | Weiter zu [[BubbleSort]] |