inf-abi2027/02 Sortieralgorithmen/01 SelectionSort.ipynb

401 lines
9.7 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "4d0577ad-58c8-43b9-acf1-e1c29f455600",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"import { assertEquals } from \"jsr:@std/assert\";\n",
"import \"https://git.amgdhg.de/kg/tslib/raw/branch/main/logger.ts\""
]
},
{
"cell_type": "markdown",
"id": "e6f8e242-3a62-41ce-a36f-fe47c7d49528",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"# Minimumsuche\n",
"\n",
"Bei der Minimumsuche sucht man das kleinste Element in einer Liste bzw. einem Array."
]
},
{
"cell_type": "markdown",
"id": "8699de81-f9a2-446a-8680-bb375e9a2f80",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"Beschreibe zunächst in eigenen Worten, wie die Minimumsuche funktioniert, also wie in einem gegebenen, unsortierten Array der kleinste Wert herausgefunden werden kann:"
]
},
{
"cell_type": "raw",
"id": "5ae9059b-e617-4b07-a1dd-4ba4e82bf09a",
"metadata": {
"editable": true,
"raw_mimetype": "",
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": []
},
{
"cell_type": "markdown",
"id": "57cfea67-8905-4a13-a01a-089283cbcaf9",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 02.01.1: Zufallszahlengenerator\n",
"\n",
"Programmiere einen Funktion `zufall`, die\n",
"* einen Parameter `laenge` übergeben bekommt und\n",
"* ein Array der mit `laenge` zufällig erzeugten Zahlen zurückgibt"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d8525ccd-859d-44df-9806-a6ac11ccfa66",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "28ec1840-3feb-4744-9893-573c0cc4f81b",
"metadata": {
"editable": false,
"jupyter": {
"source_hidden": true
},
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"let _nr = \"02.01.1\"\n",
"Deno.test(`${_nr}: function`, () => {\n",
" assertEquals(typeof zufall, 'function')\n",
"})\n",
"Deno.test(`${_nr}: Parameter`, () => {\n",
" assertEquals(zufall.length, 1)\n",
"})\n",
"Deno.test(`${_nr}: zufall(0)=[]`, () => {\n",
" assertEquals(zufall(0), [])\n",
"})\n",
"Deno.test(`${_nr}: zufall(1)`, () => {\n",
" let last = 0\n",
" for(let i = 0; i < 10; i++) {\n",
" let now = zufall(1)\n",
" assertEquals(now.length, 1)\n",
" assertEquals(now[0] >= 0, true)\n",
" assertEquals(now[0] <= 1, true)\n",
" assertEquals(now[0] === last, false)\n",
" last = now[0]\n",
" }\n",
"})\n",
"Deno.test(`${_nr}: zufall(10)`, () => {\n",
" let arr = zufall(10)\n",
" assertEquals(arr.length, 10)\n",
" for (let i = 1; i < arr.length; i++) {\n",
" assertEquals(arr[i] >= 0, true)\n",
" assertEquals(arr[i] <= 1, true)\n",
" if (i > 1) assertEquals(arr[i] === arr[i-1], false)\n",
" }\n",
"})\n",
"Deno.test(`${_nr}: zufall(1000)`, () => {\n",
" let arr = zufall(1000)\n",
" assertEquals(arr.length, 1000)\n",
" for (let i = 1; i < arr.length; i++) {\n",
" assertEquals(arr[i] >= 0, true)\n",
" assertEquals(arr[i] <= 1, true)\n",
" if (i > 1) assertEquals(arr[i] === arr[i-1], false)\n",
" }\n",
"})"
]
},
{
"cell_type": "markdown",
"id": "cb89cc31-62b7-439d-843f-b1cbf872bc80",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 02.01.2: Minimumsuche\n",
"\n",
"Programmiere eine Funktion `minimum`:\n",
"* die einen Parameter `liste` übergeben bekommt. Dieser Parameter enthält ein Array mit Zahlen.\n",
"* Zurückgegeben werden soll der kleinste Wert des Arrays.\n",
"\n",
"*Anmerkung: es gibt auch die `Math.min` Funktion, diese soll hier aber nicht benutzt werden!*"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5f746983-b432-45f3-b6a5-3b27764f69e3",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "9611c7d1-a9ea-4332-b189-0df85955ed74",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"let liste = zufall(10) // Array erzeugen\n",
"console.log(liste) // Array ausgeben\n",
" // kleinster Wert suchen und ausgeben\n",
"console.log(\"kleinster Wert: \" + minimum(liste))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "43c999ec-2a4e-4f42-bab1-314b077420d4",
"metadata": {
"editable": false,
"jupyter": {
"source_hidden": true
},
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"let _nr = \"02.01.2\"\n",
"Deno.test(`${_nr}: function`, () => {\n",
" assertEquals(typeof minimum, 'function')\n",
"})\n",
"Deno.test(`${_nr}: Parameter`, () => {\n",
" assertEquals(minimum.length, 1)\n",
"})\n",
"Deno.test(`${_nr}: minimum`, () => {\n",
" let arr = zufall(20)\n",
" assertEquals(arr.length, 20)\n",
" assertEquals(minimum(arr), Math.min(...arr))\n",
"})"
]
},
{
"cell_type": "markdown",
"id": "5582abff-8ada-422d-ac2b-130f0d715ace",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 02.01.3: Sortierte Ausgabe\n",
"\n",
"Überlege dir, wie man diese Minimumsuche dazu verwenden könnte, alle Einträge des Arrays sortiert auszugeben.\n",
"\n",
"Programmiere eine Funktion `sortiert`, die ein Array als Parameter bekommt und in sortierter Reihenfolge jeden einzelne Zahl ausgibt.\n",
"\n",
"#### Tipp:\n",
"Mit `liste.splice(i,c)` lassen sich aus dem Array `liste` von der Position `i` aus insgesamt `c` Einträge löschen.\n",
"\n",
"*Hinweis: es gibt auch die `sort`-Funktion, die soll hier aber nicht benutzt werden!*"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "29b54eef-7b73-4c5c-91fd-90332451b4fb",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "a853f29b-4f3b-4032-9b56-e9f3dbe61e60",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"sortiert(liste)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "4e1c39ce-e9f3-44f9-b1ec-47e597b9fcaa",
"metadata": {
"editable": false,
"jupyter": {
"source_hidden": true
},
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"let _nr = \"02.01.3\"\n",
"Deno.test(`${_nr}: function`, () => {\n",
" assertEquals(typeof sortiert, 'function')\n",
"})\n",
"Deno.test(`${_nr}: Parameter`, () => {\n",
" assertEquals(sortiert.length, 1)\n",
"})\n",
"Deno.test(`${_nr}: sortiert`, () => {\n",
" let arr = zufall(4)\n",
" console.start()\n",
" sortiert(arr)\n",
" let res = console.end().split('\\n')\n",
" assertEquals(res, arr.sort().map(e => `${e}`))\n",
"})"
]
},
{
"cell_type": "markdown",
"id": "fbded430-a6a0-485e-bff7-375e9053008c",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 02.01.4: Funktion `sort`\n",
"\n",
"Programmiere eine Funktion `sort`, die ein unsortiertes Array als Parameter bekommt und als Ergebnis die Werte in sortierter Reihenfolge zurückgibt."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "92580ecc-329b-4778-b92a-7c54626796ea",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "ebda8fca-b380-41e9-8ce0-f7e8232c0a4f",
"metadata": {
"editable": false,
"jupyter": {
"source_hidden": true
},
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"let _nr = \"02.01.4\"\n",
"Deno.test(`${_nr}: function`, () => {\n",
" assertEquals(typeof sort, 'function')\n",
"})\n",
"Deno.test(`${_nr}: Parameter`, () => {\n",
" assertEquals(sort.length, 1)\n",
"})\n",
"Deno.test(`${_nr}: sort`, () => {\n",
" let arr = zufall(10)\n",
" let tmp = arr.slice().sort()\n",
" let res = sort(arr)\n",
" assertEquals(tmp, res)\n",
"})"
]
}
],
"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
}