diff --git a/book/content/Exercises/02_python/08_sortieralgorithmus/sortieralgorithmus.ipynb b/book/content/Exercises/02_python/08_sortieralgorithmus/sortieralgorithmus.ipynb index 701250a7..47a96847 100644 --- a/book/content/Exercises/02_python/08_sortieralgorithmus/sortieralgorithmus.ipynb +++ b/book/content/Exercises/02_python/08_sortieralgorithmus/sortieralgorithmus.ipynb @@ -1,6 +1,7 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { "tags": [ @@ -24,6 +25,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -31,6 +33,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -38,6 +41,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -45,6 +49,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -54,10 +59,13 @@ "\n", "* 9, 74, 90, 23, 69, 10, 72, 93, 99, 91, 45, 81, 4, 71, 14, 16, 50, 53, 82, 47, 40, 44, 4, 30, 32, 73, 99, 93, 65, 36\n", "* 69, 70, 93, 25, 85, 68, 73, 97, 22, 35, 41, 99, 22, 33, 56, 95, 86, 45, 24, 64, 73, 60, 53, 40, 94, 12, 97, 18, 75, 8\n", - "* 84, 51, 4, 8, 28, 55, 64, 25, 1, 47, 8, 66, 12, 60, 28, 18, 89, 37, 2, 48, 92, 74, 78, 28, 35, 87, 88, 51, 57, 6\n" + "* 84, 51, 4, 8, 28, 55, 64, 25, 1, 47, 8, 66, 12, 60, 28, 18, 89, 37, 2, 48, 92, 74, 78, 28, 35, 87, 88, 51, 57, 6\n", + "\n", + "Der Sortieralgorithmus wurde in ver Vorlesung vorgestellt und kann [hier](https://firedynamics.github.io/LectureComputerScience/content/Script/01_computer/021_sortieralgorithmen.html#bubblesort) aufgerufen werden." ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -65,6 +73,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -73,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ @@ -89,6 +98,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "tags": [ @@ -102,6 +112,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "tags": [ @@ -116,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 75, "metadata": { "tags": [ "loesung", @@ -151,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 76, "metadata": { "tags": [ "loesung", @@ -162,61 +173,53 @@ "outputs": [], "source": [ "def bubble_sort(A, ausgabe=False):\n", - "\n", - " # Initialer Wert für n, wird bei jedem Schleifendurchlauf \n", - " # um Eins verringert\n", + " # Initialer Wert für n\n", " n = len(A)\n", "\n", - " # Variable zum Prüfen ob eine Vertauschung erfolgt ist \n", - " # initial wird sie auf wahr gesetzt\n", - " getauscht = True\n", - " \n", - " # Iterationszähler\n", " izaehler = 0\n", - " \n", - " while getauscht == True:\n", - " getauscht = False\n", + "\n", + " for i in range(n - 1):\n", + " # Variable zum Prüfen ob eine Vertauschung erfolgt ist\n", + " tausch = False\n", + "\n", " izaehler += 1\n", - " \n", " if ausgabe == True:\n", " print(\"Iteration:\", izaehler)\n", " print(\" Liste zu Beginn der Iteration: \")\n", " print(\" \", list_str(A))\n", - " \n", + "\n", " # Vertauschungsschleife\n", - " for j in range(n-1):\n", + " for j in range(n - 1 - i):\n", " # Prüfen ob das nachfolgende Element kleiner ist,\n", " # falls ja, werden beide getauscht\n", - " if A[j+1] < A[j]:\n", + " if A[j] > A[j + 1]:\n", " if ausgabe == True:\n", - " print(\" Tausche: \", A[j], \"und\", A[j+1])\n", - " \n", - " # Tauschen des j mit dem j+1 Elementwert\n", - " mv = A[j]\n", - " A[j] = A[j+1]\n", - " A[j+1] = mv\n", - " \n", - " # Markierung, dass eine Vertauschung stattfand\n", - " getauscht = True\n", - " \n", + " print(\" Tausche: \", A[j], \"und\", A[j + 1])\n", + " temp = A[j]\n", + " A[j] = A[j + 1]\n", + " A[j + 1] = temp\n", + " tausch = True\n", " if ausgabe == True:\n", " print(\" Liste nach Tausch: \")\n", " print(\" \", list_str(A))\n", " else:\n", " if ausgabe == True:\n", - " print(\" Elemente \", A[j], \"und\", A[j+1], \" müssen nicht getauscht werden\")\n", + " print(\" Elemente\", A[j] ,\"und\", A[j+1], \"müssen nicht getauscht werden\")\n", + " \n", + " \n", + " if not tausch:\n", + " break\n", + "\n", + " if ausgabe == True:\n", + " print(\" kein Tausch mehr notwendig, Liste ist nun sortiert\")\n", "\n", - " # Schleifendurchlauf wird verkürzt \n", - " n -= 1\n", - " if not getauscht:\n", - " if ausgabe == True:\n", - " print(\" kein Tausch mehr notwendig, Liste ist nun sortiert\")\n", + " # Rückgabe der sortierten Liste\n", " return A" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 77, "metadata": { "tags": [ "loesung", @@ -245,7 +248,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 78, "metadata": { "tags": [ "loesung", @@ -265,7 +268,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 79, "metadata": { "tags": [ "loesung", @@ -297,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 80, "metadata": { "tags": [ "loesung", @@ -325,7 +328,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 81, "metadata": { "tags": [ "loesung", @@ -380,8 +383,8 @@ " Tausche: 51 und 28\n", " Liste nach Tausch: \n", " [ 4, 8, 28, 51, 55, 64, 25, 1, 47, 84]\n", - " Elemente 51 und 55 müssen nicht getauscht werden\n", - " Elemente 55 und 64 müssen nicht getauscht werden\n", + " Elemente 51 und 55 müssen nicht getauscht werden\n", + " Elemente 55 und 64 müssen nicht getauscht werden\n", " Tausche: 64 und 25\n", " Liste nach Tausch: \n", " [ 4, 8, 28, 51, 55, 25, 64, 1, 47, 84]\n", @@ -394,10 +397,10 @@ "Iteration: 3\n", " Liste zu Beginn der Iteration: \n", " [ 4, 8, 28, 51, 55, 25, 1, 47, 64, 84]\n", - " Elemente 4 und 8 müssen nicht getauscht werden\n", - " Elemente 8 und 28 müssen nicht getauscht werden\n", - " Elemente 28 und 51 müssen nicht getauscht werden\n", - " Elemente 51 und 55 müssen nicht getauscht werden\n", + " Elemente 4 und 8 müssen nicht getauscht werden\n", + " Elemente 8 und 28 müssen nicht getauscht werden\n", + " Elemente 28 und 51 müssen nicht getauscht werden\n", + " Elemente 51 und 55 müssen nicht getauscht werden\n", " Tausche: 55 und 25\n", " Liste nach Tausch: \n", " [ 4, 8, 28, 51, 25, 55, 1, 47, 64, 84]\n", @@ -410,9 +413,9 @@ "Iteration: 4\n", " Liste zu Beginn der Iteration: \n", " [ 4, 8, 28, 51, 25, 1, 47, 55, 64, 84]\n", - " Elemente 4 und 8 müssen nicht getauscht werden\n", - " Elemente 8 und 28 müssen nicht getauscht werden\n", - " Elemente 28 und 51 müssen nicht getauscht werden\n", + " Elemente 4 und 8 müssen nicht getauscht werden\n", + " Elemente 8 und 28 müssen nicht getauscht werden\n", + " Elemente 28 und 51 müssen nicht getauscht werden\n", " Tausche: 51 und 25\n", " Liste nach Tausch: \n", " [ 4, 8, 28, 25, 51, 1, 47, 55, 64, 84]\n", @@ -425,43 +428,43 @@ "Iteration: 5\n", " Liste zu Beginn der Iteration: \n", " [ 4, 8, 28, 25, 1, 47, 51, 55, 64, 84]\n", - " Elemente 4 und 8 müssen nicht getauscht werden\n", - " Elemente 8 und 28 müssen nicht getauscht werden\n", + " Elemente 4 und 8 müssen nicht getauscht werden\n", + " Elemente 8 und 28 müssen nicht getauscht werden\n", " Tausche: 28 und 25\n", " Liste nach Tausch: \n", " [ 4, 8, 25, 28, 1, 47, 51, 55, 64, 84]\n", " Tausche: 28 und 1\n", " Liste nach Tausch: \n", " [ 4, 8, 25, 1, 28, 47, 51, 55, 64, 84]\n", - " Elemente 28 und 47 müssen nicht getauscht werden\n", + " Elemente 28 und 47 müssen nicht getauscht werden\n", "Iteration: 6\n", " Liste zu Beginn der Iteration: \n", " [ 4, 8, 25, 1, 28, 47, 51, 55, 64, 84]\n", - " Elemente 4 und 8 müssen nicht getauscht werden\n", - " Elemente 8 und 25 müssen nicht getauscht werden\n", + " Elemente 4 und 8 müssen nicht getauscht werden\n", + " Elemente 8 und 25 müssen nicht getauscht werden\n", " Tausche: 25 und 1\n", " Liste nach Tausch: \n", " [ 4, 8, 1, 25, 28, 47, 51, 55, 64, 84]\n", - " Elemente 25 und 28 müssen nicht getauscht werden\n", + " Elemente 25 und 28 müssen nicht getauscht werden\n", "Iteration: 7\n", " Liste zu Beginn der Iteration: \n", " [ 4, 8, 1, 25, 28, 47, 51, 55, 64, 84]\n", - " Elemente 4 und 8 müssen nicht getauscht werden\n", + " Elemente 4 und 8 müssen nicht getauscht werden\n", " Tausche: 8 und 1\n", " Liste nach Tausch: \n", " [ 4, 1, 8, 25, 28, 47, 51, 55, 64, 84]\n", - " Elemente 8 und 25 müssen nicht getauscht werden\n", + " Elemente 8 und 25 müssen nicht getauscht werden\n", "Iteration: 8\n", " Liste zu Beginn der Iteration: \n", " [ 4, 1, 8, 25, 28, 47, 51, 55, 64, 84]\n", " Tausche: 4 und 1\n", " Liste nach Tausch: \n", " [ 1, 4, 8, 25, 28, 47, 51, 55, 64, 84]\n", - " Elemente 4 und 8 müssen nicht getauscht werden\n", + " Elemente 4 und 8 müssen nicht getauscht werden\n", "Iteration: 9\n", " Liste zu Beginn der Iteration: \n", " [ 1, 4, 8, 25, 28, 47, 51, 55, 64, 84]\n", - " Elemente 1 und 4 müssen nicht getauscht werden\n", + " Elemente 1 und 4 müssen nicht getauscht werden\n", " kein Tausch mehr notwendig, Liste ist nun sortiert\n" ] } @@ -474,6 +477,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -481,6 +485,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -488,6 +493,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "tags": [ @@ -502,7 +508,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 82, "metadata": { "tags": [ "loesung", @@ -513,42 +519,30 @@ "outputs": [], "source": [ "def bubble_sort_zaehler(A):\n", - "\n", - " # Initialer Wert für n, wird bei jedem Schleifendurchlauf \n", - " # um Eins verringert\n", + " # Initialer Wert für n\n", " n = len(A)\n", - " \n", - " # Variable zum Prüfen ob eine Vertauschung erfolgt ist \n", - " # initial wird sie auf wahr gesetzt\n", - " getauscht = True\n", - " \n", - " # Zähler für Vertauschungen\n", + "\n", " vertauschungen = 0\n", - " \n", - " # Schleife wird solgange ausgeführt bis keine\n", - " # weitere Vertauschung notwendig ist\n", - " while getauscht == True:\n", - " getauscht = False\n", - " \n", + "\n", + " for i in range(n - 1):\n", + " # Variable zum Prüfen ob eine Vertauschung erfolgt ist\n", + " tausch = False\n", + "\n", " # Vertauschungsschleife\n", - " for j in range(n-1):\n", + " for j in range(n - 1 - i):\n", " # Prüfen ob das nachfolgende Element kleiner ist,\n", " # falls ja, werden beide getauscht\n", - " if A[j+1] < A[j]:\n", - "\n", - " # Tauschen des j mit dem j+1 Elementwert\n", - " mv = A[j]\n", - " A[j] = A[j+1]\n", - " A[j+1] = mv\n", - " \n", - " # Markierung, dass eine Vertauschung stattfand\n", - " getauscht = True\n", - " \n", - " # Erhöhe Zähler der Vertauschungen\n", + " if A[j] > A[j + 1]:\n", + " temp = A[j]\n", + " A[j] = A[j + 1]\n", + " A[j + 1] = temp\n", + " tausch = True\n", " vertauschungen += 1\n", - " \n", - " # Schleifendurchlauf wird verkürzt \n", - " n -= 1\n", + " \n", + " # Abbruch des Sortieralgorithmus, wenn kein Tausch \n", + " # statt fand\n", + " if not tausch:\n", + " break\n", "\n", " # Rückgabe der sortierten Liste als auch der Anzahl \n", " # der Vertauschungen \n", @@ -557,7 +551,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 83, "metadata": { "tags": [ "loesung", @@ -593,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 84, "metadata": { "tags": [ "loesung", @@ -672,7 +666,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.10.10" } }, "nbformat": 4,