Das lernst du heute
- Werte ordnen
- Tauschen mit Registern
- Aufwand pro Takt
Fünf Akkus, fünf Ladestände. Welcher ist der zweitschwächste? Minimum sagt dir nur den schwächsten. Wer eine Rangfolge braucht, muss sortieren – und IC10 hat dafür keinen Befehl. Du baust ihn selbst.
Werte ordnen: Bubblesort
Das einfachste Verfahren vergleicht immer zwei Nachbarn und tauscht sie, wenn sie falsch herum stehen. Nach einem Durchlauf steht der größte Wert ganz hinten. Der nächste Durchlauf braucht ihn nicht mehr anzufassen und ist einen Schritt kürzer.
| Durchlauf | Stack 0–4 |
|---|---|
| Start | 5 3 9 1 7 |
| 1 | 3 5 1 7 9 |
| 2 | 3 1 5 7 9 |
| 3 | 1 3 5 7 9 |
| 4 | 1 3 5 7 9 |
Tauschen mit Registern
IC10 hat kein swap. Zwei Stack-Plätze tauschst du über zwei Register: beide lesen, über Kreuz zurückschreiben.
get a db j
add k j 1
get b db k
ble a b weiter # schon richtig
poke j b
poke k a
weiter:
Der Sprung über den Tausch heißt: Stehen die beiden schon richtig, bleibt alles, wie es ist. Bei gleichen Werten wird ebenfalls nicht getauscht, deshalb ble und nicht blt.
Zwei Schleifen
Die innere Schleife läuft mit j über die Paare, die äußere verkürzt nach jedem Durchlauf die grenze:
sub grenze ANZAHL 1
aussen:
move j 0
innen:
add j j 1
blt j grenze innen
sub grenze grenze 1
bgtz grenze aussen
Aufwand pro Takt
Bubblesort vergleicht bei n Werten n · (n − 1) / 2 Paare. Jeder Vergleich kostet hier etwa acht Befehle:
| Werte | Vergleiche | Befehle | Takte |
|---|---|---|---|
| 5 | 10 | ~80 | 1 |
| 10 | 45 | ~360 | 3 |
| 20 | 190 | ~1 500 | 12 |
| 50 | 1 225 | ~10 000 | 77 |
Der Chip unterbricht nach 128 Befehlen von selbst und macht im nächsten Takt weiter. Bei 50 Werten dauert das Sortieren also fast 40 Sekunden – in der Zeit tut der Chip nichts anderes.
Brauchst du nur den kleinsten oder größten Wert, sortiere nicht: Eine Suche (morgen) braucht n Vergleiche statt n · (n − 1) / 2. Sortieren lohnt sich für Ranglisten und den Median.
Schaubild
Übung
Aufgabe
In w0 bis w4 (r0–r4) stehen fünf Werte, sie liegen schon im Stack 0–4. Sortiere sie im Stack mit Bubblesort aufsteigend und schreibe sie zurück nach w0 bis w4.
Hinweise
Hinweis 1
Innere Schleife: get a db j, get b db k mit k = j + 1, ble a b weiter, sonst über Kreuz poke.
Hinweis 2
Äußere Schleife: grenze startet bei ANZAHL − 1 und wird nach jedem Durchlauf kleiner.
Hinweis 3
Zum Schluss fünfmal get zurück in die Register.
Quiz
3 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.
Tag abschließen
- Übung im Simulator bestanden
- Quiz mit mindestens 60 % bestanden
Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.
Fehler in dieser Lektion melden
Zum Melden bitte anmelden. Anmelden