{ "cells": [ { "cell_type": "markdown", "id": "cd29a032-072b-4ca6-a3e3-efb176993768", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Projekt zu Sortierverfahren" ] }, { "cell_type": "markdown", "id": "40d22d02-7d98-41f9-a5c0-d43a372e50a8", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Ziel\n", "Ziel ist es, verschiedene Sortierverfahren zu implementieren und zu vergleichen" ] }, { "cell_type": "markdown", "id": "e584a65a-a138-4064-85f2-f3fa468cf0ac", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 1. Allgemeine Kriterien\n", "* Auch zu Hause kann und soll weitergearbeitet werden!\n", "* Jedes Sortierverfahren soll in ein eigenes Jupyter-Notebook programmiert werden - eine Vorlage steht dafür bereit.\n", "* Die Funktion, um ein Array mit Zufallszahlen zu erzeugen, kann von Aufgabe 01.06.3 übernommen werden und muss dann in jedes Jupyter-Notebook kopiert werden.\n", "* Beginn ist am Montag, 24.11. Abgabe ist am Freitag, 12.12.\n", "* Am Montag, 8.12. findet die Klausur statt." ] }, { "cell_type": "markdown", "id": "1e385fe9-3054-41a9-9eda-192d0468cb0e", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 2. **MUSS**-Kriterien\n", "Die *MUSS*-Kriterien müssen auf jeden Fall erfüllt werden. Werden nur diese erfüllt, so liegt die Endnote im Bereich von ca. 6 Punkten.\n", "* Das Sortierverfahren **SelectionSort** muss sowohl **out-of-place** als auch **in-place** programmiert werden.\n", " * Hinweis: bei in-place dürfen keine Array-Funktionen wie z.B. `splice` oder `push` verwendet werden!\n", "* Das Sortierverfahren **InsertionSort** muss programmiert werden.\n", "* Der Quellcode muss **kurz kommentiert** werden.\n", " * Es soll nicht jede Zeile kommentiert werden, lediglich Blöcke, was ihr euch dabei gedacht habt und was der jeweilige Abschnitt tut." ] }, { "cell_type": "markdown", "id": "5642f602-be4b-417d-b993-fdf81e1ae37f", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 3. **SOLL**-Kriterien\n", "Werden zusätzlich auch noch die SOLL-Kriterien erfüllt, so liegt die Endnote bei ca. 10 Punkten.\n", "* Als Beispiel für die \"divide-and-conquer\"-Technik soll **MergeSort** programmiert werden.\n", "* **BubbleSort** soll programmiert werden.\n", "* Es soll eine Zeitmessung programmiert werden, um die Schnelligkeit der verschiedenen Sortierverfahren miteinander vergleichen zu können.\n", " * Achtung: die Zeitmessung nur für den Sortiervorgang **ohne** Ausgabe\n", "* Die *durchschnittlich* benötigte Zeit soll für **alle** Sortierverfahren für unterschiedlich große Arrays gemessen und zusammengestellt/verglichen werden." ] }, { "cell_type": "markdown", "id": "aca2c026-0d46-44ee-b177-65450ba74f89", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 4. **DARF**-Kriterien\n", "Werden **alle** Kriterien erfüllt, so liegt die Endnote bei etwa 15 Punkten.\n", "* Mindestens **zwei** der folgenden Algorithmen dürfen programmiert werden:\n", " * **HeapSort**\n", " * **QuickSort**\n", " * **TimSort**\n", " * oder ein selbst gewählter Sortieralgorithmus.\n", "* Begründe für **alle** Algorithmen, ob diese in *deiner* Programmierung stabil oder nicht-stabil funktionieren.\n", "* Gib die Laufzeit deiner Programmierung für alle Algorithmen an." ] } ], "metadata": { "kernelspec": { "display_name": "Deno", "language": "typescript", "name": "deno" }, "language_info": { "codemirror_mode": "typescript", "file_extension": ".ts", "mimetype": "text/x.typescript", "name": "typescript", "nbconvert_exporter": "script", "pygments_lexer": "typescript", "version": "5.8.3" } }, "nbformat": 4, "nbformat_minor": 5 }