Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1
Zielsetzung Ein Feld(Array) von Daten soll, damit es leichter verarbeitet werden kann, nach einem vorgegebenen Schema sortiert werden: – numerisch – alphabetisch JBS Tr, info Q1
Beispiele für Sortierbedarf Klassenlisten Telefonbücher Abrechnungen Ordnerstruktur im PC etc. JBS Tr, info Q1
Erinnerung Was ist ein Algorithmus? Unter einem Algorithmus (auch Lösungs- verfahren) versteht man eine genau definierte Handlungsvorschrift zur Lösung eines Problems oder einer bestimmten Art von Problemen in endlich vielen Schritten. JBS Tr, info Q1
d.h. Das Verfahren muss in einem endlichen Text eindeutig beschreibbar sein (Finitheit). Jeder Schritt des Verfahrens muss tatsächlich ausführbar sein (Ausführbarkeit). Das Verfahren darf zu jedem Zeitpunkt nur endlich viel Speicherplatz benötigen Das Verfahren darf nur endlich viele Schritte benötigen (Terminierung). JBS Tr, info Q1
Ganz gut wäre… Wenn der Algorithmus bei denselben Voraussetzungen immer das gleiche Ergebnis liefert. (Determiniertheit) Die nächste anzuwendende Regel im Verfahren zu jedem Zeitpunkt eindeutig definiert ist. (Determinismus) JBS Tr, info Q1
Zurück zum Sortieren: Folgende Sortierverfahren werden häufig angewandt: – Select-Sort – Bubble-Sort – Insert-Sort – Quick-Sort JBS Tr, info Q1
Select-Sort Idee: Finde zunächst das kleinste Element im Datenarray und tausche es gegen das an der ersten Stelle befindliche Element aus. Anschließend finde das zweitkleinste Element und tausche es gegen das zweite Element aus usw…. JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Was muss passieren? Es muss ermittelt werden, an welcher Position das kleinste Element (Minimum) des Feldes sitzt. Sei a(i) das Minimum Schleife: Vergleiche alle Zahlen mit Minimum, wenn eine Zahl kleiner ist, dann wähle diese als Minimum JBS Tr, info Q1
Tausch-Schritt: Wenn die kleinste Zahl ermittelt ist, tausche sie mit der Zahl an der ersten Position. Beginne von vorn mit der zweiten Zahl, d.h. alles bisherige muss in einer weiteren Schleife zusammengefasst werden. JBS Tr, info Q1
Struktogramm Für i = 1 bis Anzahl – 1 Element a(i) als Minimum festlegen Für j = i bis Anzahl a(j) < Minimum JaNein Minimum = a(j) falsche Position von Min Ja i j Nein a(j) = a(i) a(i) = Minimum JBS Tr, info Q1
Aufgabenstellung Erstellen Sie ein Programm, mit dessen Hilfe Elemente in eine Liste eingefügt werden (über eine ListBox) und sortieren Sie anschließend diese Liste mit Select(ion)-Sort Beachten Sie hierbei: Die Listenelemente werden durch ein Array aufgerufen: lstListe.Items(i) JBS Tr, info Q1
Mögliches Formular JBS Tr, info Q1
Code für Select-Sort Private Sub bnSelect_Click(…) Handles bnSelect.Click Hättest du wohl gerne … End Sub JBS Tr, info Q1
Bubble-Sort Idee: Vergleiche von links nach rechts immer zwei Elemente der Liste (des Arrays) und vergleiche sie und tausche sie gegebenenfalls. Dadurch wandert die größte Zahl immer weiter nach rechts Beim zweiten Durchgang wandert die zweitgrößte Zahl, usw. JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel JBS Tr, info Q1
Ein Beispiel Eine weiter Überprüfung der Zahlen ergibt, dass sie schon in der richtigen Reihenfolge stehen, die Liste ist also sortiert. JBS Tr, info Q1
Was muss passieren? In jedem Durchlauf wird geprüft, ob ein Element größer als das darauffolgende ist. Wenn ja, werden diese beiden Elemente vertauscht, das größere Element wandert also nach rechts Wenn nein, dann wird das folgende Element zum Vergleich herangezogen. Dann beginnt der nächste Durchlauf JBS Tr, info Q1
Bubble-Struktogramm Liste erstellen Für i = 0 bis anzahl - 1 Für j = 0 bis Anzahl - 1 Wenn zahl(i) < zahl(j) ja nein Tausche zahl(i) und zahl(j) Ausgabe des sortierten Arrays JBS Tr, info Q1
Aufgabenstellung Na, is‘ ja wohl klar oder? Sie können gerne den Bubble Sort-Algorithmus über einen eignenen Button in das schon existierende Programm integrieren. Das könnte so aussehen: JBS Tr, info Q1
Formular-Beispiel: JBS Tr, info Q1
Code für Bubble-Sort JBS Tr, info Q1