Bouwsteen 2 — twee buren ruilen
Hier bouw je op verder
- Python Tuples
Leerdoel: je kunt twee opeenvolgende elementen ruilen wanneer ze fout staan.
Wat we willen
Bij elk paar dat fout staat (lijst[i] > lijst[i+1]): de twee elementen
omwisselen.
Eén regel: tuple-swap
Net als bij selection sort gebruiken we de Pythonische tuple-swap:
lijst[i], lijst[i + 1] = lijst[i + 1], lijst[i]
Python evalueert eerst de rechterkant tot een tuple
(lijst[i+1], lijst[i]) en kent die dan toe aan de linkerkant. Geen
informatieverlies.
Voorspel
Wat denk je dat dit print?
lijst = [3, 1, 4, 1, 5]
i = 0
if lijst[i] > lijst[i + 1]:
lijst[i], lijst[i + 1] = lijst[i + 1], lijst[i]
print(lijst)
Antwoord
[1, 3, 4, 1, 5]
De 3 en de 1 op posities 0 en 1 zijn geruild.
Run
Experimenteer
Probeer voor alle geldige i's achter elkaar, net als in bouwsteen 1:
Wat zie je?
start: [3, 1, 4, 1, 5]
i=0: swap → [1, 3, 4, 1, 5]
i=1: laat → [1, 3, 4, 1, 5]
i=2: swap → [1, 3, 1, 4, 5]
i=3: laat → [1, 3, 1, 4, 5]
eind: [1, 3, 1, 4, 5]
Dit is precies één pass van bubble sort over de lijst. De 5 zit nu
achteraan op zijn juiste plek. Maar de lijst is nog niet helemaal
gesorteerd — er moeten meer passes komen. En [0, 1, 2, 3] uitschrijven
werkt alleen voor een lijst van vijf; in de volgende stap wordt dat een
range die voor elke lengte klopt.
Wat nu nog mist
Eén pass is meestal niet genoeg. In de volgende stap zetten we vast wat een pass precies is, en daarna laten we hem herhalen.
Door naar bouwsteen 3: één pass.