Begleitmaterial Abitur 2024

Suchen und Sortieren auf der linearen Datenstruktur Array

Im Rahmen dieser Einheiten beschäftigen wir uns mit dem Suchen und Sortieren von Objekten. Der Einfachheit halber werden wir uns am Anfang auf das Sortieren von Zahlen beschränken, wobei jedes Objekt sortiert bzw. gesucht werden kann, wenn ein Suchkriterium vorliegt. In unserem Fall arbeiten wir auf der Datenstruktur Array Arrays

UML Diagramm zum Projekt

Das unten stehende UML Diagramm dient als Vorlage. Das dargestellte Diagramm ist ein Implementaionsdiagram, da programmiersprachenspezifische Elemente (hier Java) enthalten sind.

Ein Entwurfsdiagramm ist programmiersprachenunabhängig und kann als Vorlage für unterschiedlichte Programmiersprachen genutzt werden. Da Konstruktoren, get- und set-Methoden pragrammiersprachenspezifisch sind werden diese nicht mit dargestellt.

Entwurfsdiagramm

Implementationsdiagramm

Aufgabe(n) zur Lösung mit edugit

  1. Bearbeite die Aufgaben unter "Arbeiten mit BlueJ und edugit".
  2. Erstelle eine Arbeitskopie des Projekts. Eine Arbeitskopie kannst du unter https://edugit.org/abitur-2024/01-suchen-und-sortieren-abi-2024.git mit BlueJ auschecken.
  3. Kopiere die Vorlagenklasse unter deinem Namen z.B.: Sortieren_Ulf in dasselbe Projekt.
  4. Implementiere zuerst die Methoden, die kein Sortier- oder Suchalgorithmus sind. Was die einzelnen Methoden leisten sollen, steht in den Methodenkommentaren!
  5. Teste deine Implementationen, indem du die erzeugten Objekte inspiziert. Ist das Array immer den Anforderungen entsprechend gefüllt?
  6. Commitet, pusht und aktualisiere deine Implementation.
  7. Fertigt mit dem Struktogrameditor der Uni Dresden Struktogramme zu den einfachen Sortieralgorithmen: Bubble-, Insertion- und Selectionsort an und speichere sowohl eine Bilddatei als auch eine .json Datei deines Struktograms.
  8. Nutze den Quellcodeexport und teste deine Exporte in deiner Klasse. Sollte etwas nicht funktionieren, verbessere es und passe auch deine Struktogramme dementsprechend an.
  9. Commitet, pusht und aktualisiere deine Implementation.
  10. Fahre nach demselben Vorgehen (6-8) mit den beiden Suchmethoden (lineare Suche und binäre Suche) fort. Hilfestellungen findest du wieder in den Methodendokumentationen.
  11. Fahre nach demselben Vorgehen (6-8) mit den beiden rekursiven Sortiermethoden (Quicksort und Mergesort) fort. Hilfestellungen findest du wieder in den Methodendokumentationen.
  12. Beginne zum Beginn einer Stunde mit einer frischen Arbeitskopie deiner Implementation.

Aufgabe(n) zur Lösung mit der online-IDE

  1. Implementiere zuerst die Methoden, die kein Sortier- oder Suchalgorithmus sind. Was die einzelnen Methoden leisten sollen, steht in den Methodenkommentaren! Nutze hierfür die Vorlage in der Online-IDE. Hilfestellungen findest du im weiteren Kapitel. Informationen zur Klasse Mathe und den Umgagn mit dieser findest du hier https://www.learnj.de/doku.php?id=api:documentation:math:start und hier https://www.learnj.de/doku.php?id=einstieg:weiteredatentypen:start#die_klasse_math
  2. Teste deine Implementationen, indem du die erzeugten Objekte inspiziert. Ist das Array immer den Anforderungen entsprechend gefüllt?
  3. Commitet, pusht und aktualisiere deine Implementation.
  4. Fertigt mit dem Struktogrameditor der Uni Dresden Struktogramme zu den einfachen Sortieralgorithmen: Bubble-, Insertion- und Selectionsort an und speichere sowohl eine Bilddatei als auch eine .json Datei deines Struktograms.
  5. Nutze den Quellcodeexport und teste deine Exporte in deiner Klasse. Sollte etwas nicht funktionieren, verbessere es und passe auch deine Struktogramme dementsprechend an.
  6. Commitet, pusht und aktualisiere deine Implementation.
  7. Fahre nach demselben Vorgehen (6-8) mit den beiden Suchmethoden (lineare Suche und binäre Suche) fort. Hilfestellungen findest du wieder in den Methodendokumentationen.
  8. Fahre nach demselben Vorgehen (6-8) mit den beiden rekursiven Sortiermethoden (Quicksort und Mergesort) fort. Hilfestellungen findest du wieder in den Methodendokumentationen.
  9. Beginne zum Beginn einer Stunde mit einer frischen Arbeitskopie deiner Implementation.

Einfache Sortieralgorithmen

Bubblesort und optimierter Bubblesort

Video

Erklärung

Beispiel Anwendung:

[0][1][2][3][4][5][6][7][8][9]ges. Zahl
167811907774510989011

Struktogramm und Java Quellcode

Bubblesort
Bubblesort

Du kannst dir das Struktorgramm auch als json Datei herunterladen. Dieses kann dann im Struktogramm Editor der Uni Dresden eingebunden und weiterverwendet werden Herunterladen

Insertionsort

Video

Erklärung

Der Insertion Sort ist ein stabiler Sortieralgorhitmus. Übersetzen lässt sich Insertion Sort mit den englischen Wörtern Insertion = Einfügen und Sort = Sortieren, so mit herrscht Sortieren durch Einfügen. Es gibt einen sortierten- und unsortierten Bereich in Insertion Sort. Die erste Zahl (im Array Fach 0) gehört von Anfang an zum sortierten Bereich, daraufhin wird die nächste Zahl im unsortierten Bereich mit den Zahlen im sortierten Bereich verglichen und an die richtige Position gebracht. Dies bedeutet das der Algorhithmus in-place (weiterer Speicherplatz wird außerhalb des Arrays nicht benötigt) arbeitet.

Beispiel Anwendung:

[0][1][2][3][4][5]
16781190777
16781190777
16781190777
16117890777
11167890777
11169780777
11916780777
91116780777
91116078777
91101678777
90111678777
09111678777
09111678777

Struktorgramm und Java Quellcode

Insertionsort
Insertionsort

Du kannst dir das Struktorgramm auch als json Datei herunterladen. Dieses kann dann im Struktogramm Editor der Uni Dresden eingebunden und weiterverwendet werden Herunterladen

Selectionsort

Video

Erklärung

Beispiel Anwendung:

[0][1][2][3][4][5][6][7][8][9]ges. Zahl
167811907774510989011

Struktorgramm und Java Quellcode

Rekursive Sortieralgorithmen

Mergesort

Video

Erklärung

Beispiel Anwendung:

[0][1][2][3][4][5][6][7][8][9]ges. Zahl
167811907774510989011

Struktorgramm und Java Quellcode

Quicksort

Video

Erklärung

Das Array wird um ein frei zu wählendes Pivotelement sortiert. Anschließend wird dasselbe Prinzip auf die kleineren "Teilarrays" angewand, bis das Problem trivial ist, also nuur noch ein Elemnt sortiert werden muss.

Beispiel Anwendung

Aufruf Gesamtarray

[0][1][2][3][4][5][6][7][8][9]
1678110977745109890
LPR
1678110977745109890
LPR
8781109777451091690
LPR
8781109777451091690
LPR
8781109777451091690
LPR
8781109777451091690
LPR
8781109777451091690
LP R
8911078777451091690
L PR
8911078777451091690
L PR
8011978777451091690
LP R
8011978777451091690
LP R
8091178777451091690
L PR
8091178777451091690
L P

Teilung und rekursiver Aufruf

[0][1][2][3][4][5][6][7][8][9]
8091178777451091690
LP R

Tauschen

[0][1][2][3][4][5][6][7][8][9]
0891178777451091690
L PR
0891178777451091690
L P R

Teilung

[0][1][2][3][4][5][6][7][8][9]
0891178777451091690
L P R

Rekursiver Aufruf

[0][1][2][3][4][5][6][7][8][9]
0891178777451091690
LPR
0891178777451091690
LPR
0891178777451091690
LPR
0891116777451097890
LPR
0891116777451097890
LPR
0891116777451097890
LPR
0891116777451097890
LP R
0891116457771097890
L PR

Teilung und rekursiver Aufruf

[0][1][2][3][4][5][6][7][8][9]
0891116457771097890
LP R
0891116457771097890
L P R

Teilung

[0][1][2][3][4][5][6][7][8][9]
0891116457771097890
L P R

Rekursiver Aufruf

[0][1][2][3][4][5][6][7][8][9]
0891116457771097890
LPR
[0][1][2][3][4][5][6][7][8][9]
0891116457771097890
LPR
0891116457771097890
LPR
0891116457771097890
LP R
0891116451097777890
L PR
0891116451097777890
L P R

Teilung und rekursiver Aufruf

[0][1][2][3][4][5][6][7][8][9]
0891116451097777890
L P R
0891116451097777890
LPR
0891116451097777890
LP R
0891116451097877790
L PR
0891116451097877790
L P R

Teilung und rekursiver Aufruf

[0][1][2][3][4][5][6][7][8][9]
0891116451097877790
LP R
0891116451097890777
L PR
0891116451097890777
L P R

Fertig

[0][1][2][3][4][5][6][7][8][9]
0891116451097890777
L P R

Legende:

Links: L

Pivot: P

Rechts: R

Struktorgramm und Java Quellcode

Aufwandsabschätzung

https://cryptpad.fr/sheet/#/2/sheet/view/xH9bfbaoI0-4Vb9TtHEUxhpMWZ-P63gabh4H6ZmrGy0/