Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:suchen_und_sortieren:sortieren [2026-03-03 12:46] – [Aufgabe C2: Sortierung Prüfen] hofgf_informatik:suchen_und_sortieren:sortieren [2026-04-09 06:53] (aktuell) hof
Zeile 52: Zeile 52:
   * In-Place: Wird abgesehen von der zu sortierenden Liste nur noch eine konstante Speicherkapazität verwendet, oder wird beispielsweise eine neue Liste aufgebaut, die den Speicherbedarf verdoppelt?   * In-Place: Wird abgesehen von der zu sortierenden Liste nur noch eine konstante Speicherkapazität verwendet, oder wird beispielsweise eine neue Liste aufgebaut, die den Speicherbedarf verdoppelt?
     * Wenn du beim Sortieren nur Elemente vertauschst, statt eine neue Liste anzulegen, hast du einen In-Place-Algorithmus verwendet.     * Wenn du beim Sortieren nur Elemente vertauschst, statt eine neue Liste anzulegen, hast du einen In-Place-Algorithmus verwendet.
 +
 #### Aufgabe C2: Sortierung Prüfen #### Aufgabe C2: Sortierung Prüfen
 Schreibe eine Funktion `is_sorted(l)` die genau dann `True` zurückgibt, wenn `l` aufsteigend sortiert ist, sonst `False`. Schreibe eine Funktion `is_sorted(l)` die genau dann `True` zurückgibt, wenn `l` aufsteigend sortiert ist, sonst `False`.
Zeile 66: Zeile 67:
  
 <nodisp 1> <nodisp 1>
- 
 ++++Lösung| ++++Lösung|
-<code python>+<html><script type="module" src="https://bottom.ch/editor/stable/bottom-editor.js"></script></html> 
 +  
 +<html><bottom-editor>
 def is_sorted(l): def is_sorted(l):
     for index in range(len(l) - 1):     for index in range(len(l) - 1):
Zeile 79: Zeile 81:
 print(is_sorted(['Apfelküchlein', 'Caramel', 'Zuckerwatte'])) print(is_sorted(['Apfelküchlein', 'Caramel', 'Zuckerwatte']))
 print(is_sorted(['Zuckerwatte', 'Apfelküchlein', 'Caramel'])) print(is_sorted(['Zuckerwatte', 'Apfelküchlein', 'Caramel']))
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 107: Zeile 109:
  
   - Schreibe eine Funktion ''selection\_sort(li)'', der du eine unsortierte Liste übergeben kannst und die eine sortierte Liste zurückgibt.   - Schreibe eine Funktion ''selection\_sort(li)'', der du eine unsortierte Liste übergeben kannst und die eine sortierte Liste zurückgibt.
-  - Schreibe danach eine Funktion ''binary\_search(li, el)'', der du eine sortierte Liste und das gesuchte Element übergeben kannst und die den Index des gesuchten Elements in der Liste zurückgibt. Falls die Funktion nichts findet, soll sie None zurückgeben.+  - Schreibe danach eine Funktion ''binary\_search(li, el)'', der du eine sortierte Liste und das gesuchte Element übergeben kannst und die den Index des gesuchten Elements in der Liste zurückgibt. Falls die Funktion nichts findet, soll sie `Nonezurückgeben.
   - Kopiere die beiden Listen in deinen Code.   - Kopiere die beiden Listen in deinen Code.
   - Erweitere deinen Code, sodass du eine Obstsorte festlegen kannst und am Ende eine der folgenden beiden Nachrichten ausgegeben wird.    - Erweitere deinen Code, sodass du eine Obstsorte festlegen kannst und am Ende eine der folgenden beiden Nachrichten ausgegeben wird. 
Zeile 115: Zeile 117:
  
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung| ++++Lösung|
-<code python> 
-obstsorten = ["Apfel", "Banane", "Kirsche", "Orange", "Mango", "Pfirsich", "Erdbeere", "Birne", "Himbeere", "Kiwi", "Ananas", "Blaubeere"] 
-farben = ["gelb", "rot", "gelb", "grün", "blau", "rot", "rot", "rot", "braun", "orange", "orange", "orange"] 
  
 +<html><script type="module" src="https://bottom.ch/editor/stable/bottom-editor.js"></script></html>
 +<html><bottom-editor>
 def find_min(l): def find_min(l):
     min_index = 0     min_index = 0
Zeile 151: Zeile 152:
             right = middle - 1             right = middle - 1
     return None     return None
 +
 +obstsorten = ["Apfel", "Banane", "Kirsche", "Orange", "Mango", "Pfirsich", "Erdbeere", "Birne", "Himbeere", "Kiwi", "Ananas", "Blaubeere"]
 +farben = ["gelb", "rot", "gelb", "grün", "blau", "rot", "rot", "rot", "braun", "orange", "orange", "orange"]
  
 mein_obst = "Erdbeere" mein_obst = "Erdbeere"
Zeile 156: Zeile 160:
 mein_index = binary_search(obstsorten_sortiert, mein_obst) mein_index = binary_search(obstsorten_sortiert, mein_obst)
 if mein_index is None: if mein_index is None:
- print("Die Obstsorte {} wurde nicht gefunden.".format(mein_obst))+ print(f"Die Obstsorte {mein_obst} wurde nicht gefunden.")
 else: else:
- print("Die Obstsorte {} hat die Farbe {}.".format(mein_obst, farben[mein_index])+ print(f"Die Obstsorte {mein_obst} hat die Farbe {farben[mein_index]}."
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 166: Zeile 170:
  
 Der Algorithmus wird [[gf_informatik:suchen_und_sortieren:insertion_sort|hier vorgestellt und Schritt für Schritt implementiert]]. Der Algorithmus wird [[gf_informatik:suchen_und_sortieren:insertion_sort|hier vorgestellt und Schritt für Schritt implementiert]].
-#### C6 (Herausforderung): Laufzeit-Analyse 
  
-_Selection Sort_ ist **in-place** (es wird kein zusätzlicher Platz benötigt).+#### C6 (Herausforderung): Laufzeit-Analyse
  
-Aber wie berechnen wir die Laufzeit des Algorithmus? Wieviele Vergleiche führen wir bei SelectionSort aus, um `n` Elemente zu sortieren? +Wie berechnen wir die Laufzeit des Selection-Sort-Algorithmus? Wieviele Vergleiche führen wir bei SelectionSort aus, um `n` Elemente zu sortieren? 
-  * An jeder Position vergleichen wir das Element mit allen folgenden.+  * Um das Minimum zu finden, vergleichen wir das kleinste Element mit allen anderen in der verbleibenden, unsortierten Liste.
     * Für die Position `0` sind das `n-1` Vergleiche     * Für die Position `0` sind das `n-1` Vergleiche
     * Für die Position `1` sind es `n-2`     * Für die Position `1` sind es `n-2`
     * ...     * ...
     * Für die Position `n-2` ist es ein Vergleich     * Für die Position `n-2` ist es ein Vergleich
-    * Für die Position `n-1` sind es null Vergleiche+    * Für die Position `n-1` sind es null Vergleiche (das letzte Element muss nicht mehr verglichen werden)
   * Im Durchschnitt sind es also $\frac{n-1}{2}$ Vergleiche pro Position.   * Im Durchschnitt sind es also $\frac{n-1}{2}$ Vergleiche pro Position.
-  * Insgesamt führen wir $\frac{n\cdot(n-1)}{2}$ Vergleiche aus.+  * Der Schritt wird $n$ Mal ausgeführt, insgesamt benötigen wir $\frac{n\cdot(n-1)}{2}$ Vergleiche.
  
 Es wird jedes Element mit jedem anderen verglichen. Intuitiv scheint es möglich, mit weniger Vergleichen auszukommen. Wenn wir wissen, dass `x > y` und `y > z` ist, so müssten wir eigentlich `x` nicht mehr mit `z` vergleichen. Aber wieviele Vergleiche sind mindestens notwendig? Können wir einen **Divide & Conquer** Ansatz wie bei der Binärsuche verwenden? Es wird jedes Element mit jedem anderen verglichen. Intuitiv scheint es möglich, mit weniger Vergleichen auszukommen. Wenn wir wissen, dass `x > y` und `y > z` ist, so müssten wir eigentlich `x` nicht mehr mit `z` vergleichen. Aber wieviele Vergleiche sind mindestens notwendig? Können wir einen **Divide & Conquer** Ansatz wie bei der Binärsuche verwenden?
Zeile 214: Zeile 217:
 ++++ ++++
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung| ++++Lösung|
 <code python quicksort.py> <code python quicksort.py>
  • gf_informatik/suchen_und_sortieren/sortieren.1772541969.txt.gz
  • Zuletzt geändert: 2026-03-03 12:46
  • von hof