Sortieren
Aufgabe
So unterscheiden sich die drei Verfahren
Alle drei Algorithmen kennen Sie aus der Vorlesung und den Shorts dazu. Für die Aufgabe kommt es darauf an, wie ihre Laufzeit von der Größe und der Reihenfolge der Eingabe abhängt:
- Selection Sort sucht im unsortierten Teil der Liste immer wieder das kleinste Element und setzt es an seine endgültige Stelle. Dabei durchsucht er den unsortierten Teil jedes Mal vollständig, egal wie die Liste vorher aussah.
- Bubble Sort vergleicht benachbarte Werte und vertauscht sie, wenn sie in der falschen Reihenfolge stehen. Er hört auf, sobald ein Durchlauf ohne Vertauschung bleibt.
- Merge Sort teilt die Liste rekursiv in zwei Hälften, sortiert beide und fügt sie in der richtigen Reihenfolge wieder zusammen.
| Algorithmus | schlechtester Fall | bester Fall |
|---|---|---|
| Selection Sort | ||
| Bubble Sort | ||
| Merge Sort |
Beispiel: Was passiert, wenn die Liste zehnmal so lang wird, etwa 50000 statt 5000 Zahlen?
| Laufzeit wächst wie | Rechnung | Zeit etwa |
|---|---|---|
| 10-mal so lang | ||
| 13-mal so lang | ||
| 100-mal so lang |
Bei den kleinen Dateien liegen die Zeiten der drei Programme so nah beieinander, dass man kaum etwas erkennt. Deutlich werden die Unterschiede erst bei den großen Dateien.
Aufgabenmaterial
Sie erhalten die drei bereits kompilierten C-Programme sort1, sort2 und sort3, mehrere .txt-Dateien als Eingabe und die Datei answers.txt für Ihre Antworten.
Aufgabenmaterial herunterladen
Öffnen Sie VS CodeVisual Studio Code, der kostenlose Code-Editor von Microsoft, in dem Sie im Kurs programmieren. Glossar → entsprechend Ihrem Setup.
Öffnen Sie Ihr TerminalfensterFenster, in dem Sie dem Computer Befehle als Text eintippen statt zu klicken. In VS Code liegt es im unteren Bereich des Fensters. Glossar → und führen Sie dann cdWechselt das Verzeichnis: cd me geht in den Ordner me, cd .. eine Ebene nach oben, cd allein ins Homeverzeichnis. Glossar → aus. Die EingabeaufforderungDas Zeichen am Anfang der Zeile im Terminal, etwa $ oder me/ $. Es zeigt, dass das Terminal auf Ihren nächsten Befehl wartet. Steht davor ein Ordnername wie me/, befinden Sie sich gerade in diesem Ordner. Glossar → Ihres Terminalfensters sollte wie folgt aussehen:
$Geben Sie dann
wget https://dev.inf.zone/download/exercises/05/sort.zipein und führen Sie den Befehl mit der Eingabetaste aus, um eine ZIP-Datei namens sort.zip in den aktuellen Ordner herunterzuladen. Achten Sie darauf, dass Sie das Leerzeichen zwischen wgetLädt eine Datei aus dem Internet in das aktuelle Verzeichnis herunter, im Kurs zum Beispiel das Aufgabenmaterial einer Übung. Glossar → und der folgenden URL nicht übersehen, und auch kein anderes Zeichen!
Führen Sie jetzt
unzip sort.zipaus, um das ZIP-Archiv in einen Ordner namens sort zu extrahieren. Sie brauchen die ZIP-Datei nicht mehr, also können Sie
rm sort.zipausführen. Antworten Sie mit “y”, gefolgt von der Eingabetaste, um die heruntergeladene ZIP-Datei zu entfernen. Führen Sie dann
cd sortaus, um in dieses Verzeichnis zu wechseln. Ihre Eingabeaufforderung sollte nun wie folgt aussehen:
sort/ $Spezifikation
- Die Textdateien heißen nach ihrem Inhalt:
sorted,reversedoderrandomund die Zahl der Zeilen (5000, 10000 oder 50000).reversed10000.txtenthält zum Beispiel die Zahlen von10000absteigend bis1,random50000.txt50000 Zahlen in zufälliger Reihenfolge. - Ein Programm starten Sie mit
./[Programmname] [Textdatei], zum Beispiel./sort1 reversed10000.txt. Es gibt die Zahlen sortiert aus. - Ersetzen Sie in
answers.txtjedesTODO: hintersort1 uses:usw. den Namen des Algorithmus (Selection Sort, Bubble Sort oder Merge Sort), hinterHow do you know?:eine kurze Begründung, gestützt auf Ihre Messungen. Die übrigen Zeilen lassen Sie unverändert.
Hilfestellung
Klicken Sie auf die folgenden Tipps, um einige Ratschläge zu erhalten!
Untersuchen Sie die .txt-Dateien
Die verschiedenen Arten von Dateien helfen Ihnen, die Algorithmen auseinanderzuhalten. Überlegen Sie mit der Tabelle oben, wie jeder Algorithmus bei einer bereits sortierten Liste abschneidet, wie bei einer umgekehrten und wie bei einer gemischten. Es kann helfen, eine kleine Liste jedes Typs von Hand mit jedem Verfahren durchzugehen.
Messen Sie die Zeit für jede Sortierung mit verschiedenen Eingaben
- Wechseln Sie mit
cdin das Verzeichnissortund setzen Sietimevor den Aufruf:time ./sort1 reversed10000.txtmisst, wie langesort1für 10000 absteigend sortierte Zahlen braucht. - Am Ende der Ausgabe steht unter
realdie Zeit, die bei der Ausführung tatsächlich verstrichen ist. - Die sortierten Zahlen auszugeben, kostet im Terminal selbst Zeit. Mit
time ./sort1 reversed10000.txt > /dev/nullverwerfen Sie die Ausgabe und messen nur das Sortieren. - Vergleichen Sie für jedes Programm dieselbe Dateigröße mit verschiedener Reihenfolge und dieselbe Reihenfolge mit verschiedenen Größen.
Befehle schneller eingeben
Mit Strg+Shift+C und Strg+Shift+V (unter Windows, sonst rechter Mausklick in das Terminalfenster) kopieren Sie Text in die Kommandozeile und aus ihr heraus. Frühere Befehle holen Sie mit den Pfeiltasten (hoch/runter) oder Strg+R zurück.
Testen
Korrektheit
Führen Sie in Ihrem Terminal den folgenden Befehl aus, um die Korrektheit Ihrer Arbeit zu überprüfen:
check50 -l inf-zone/exercises/2026/sortAbgeben
Geben Sie im Ordner sort ab:
inf upload sortDanach sehen Sie, welche Tests Ihr Programm besteht und ob die Übung für die Bonuspunkte zählt. Wie Sie inf installieren und sich anmelden, steht unter Abgeben mit inf.
Diese Seite als Markdown: ansehen herunterladen