stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 297

Tag 297 von 365 · Experte · Monat 10: Bits und Daten

Sortieren im Stack

Werte im Stack ordnen: Bubblesort mit zwei Schleifen, Tauschen über zwei Register und poke, und was das Sortieren an Befehlen pro Takt kostet.

Lektion 20 Min. Woche 43

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.

DurchlaufStack 0–4
Start5 3 9 1 7
13 5 1 7 9
23 1 5 7 9
31 3 5 7 9
41 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:

WerteVergleicheBefehleTakte
510~801
1045~3603
20190~1 50012
501 225~10 00077

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.

Tipp

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

Der Stack mit Stapelzeiger Platz 0 10 Platz 1 20 Platz 2 30 Platz 3 Platz 4 sp = 3 nächster freier Platz push 40 pop r0 r0 = 30 zuletzt rein, zuerst raus
Jeder Durchlauf schiebt den größten verbleibenden Wert nach hinten.

Ü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

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall