Het complete algoritme
Leerdoel: je ziet alle bouwstenen samen en onderzoekt het algoritme.
Alles samen
def bubble_sort(lijst):
n = len(lijst)
for ronde in range(n - 1):
geswapt = False
for i in range(n - 1 - ronde):
if lijst[i] > lijst[i + 1]:
lijst[i], lijst[i + 1] = lijst[i + 1], lijst[i]
geswapt = True
if not geswapt:
break
return lijst
- Regel 3:
Bouwsteen 4 — meerdere passes: hooguit
n - 1rondes, want elke ronde legt minstens één element definitief goed. - Regel 4:
Bouwsteen 5, deel één — de vlag gaat elke ronde vers op
False; alleen een echte swap zet hem om. - Regel 5:
Bouwsteen 3 — één pass. De
- rondemaakt hem elke ronde korter: de staart is al gesorteerd. - Regel 6:
Bouwsteen 1 — vergelijk buren. De laatste geldige
iisn - 2, wanti + 1moet ook bestaan. - Regel 7-8:
Bouwsteen 2 — de swap, en de vlag om te onthouden dat er iets veranderde.
- Regel 9-10:
Bouwsteen 5, deel twee — een hele pass zonder swaps betekent: gesorteerd. Eerder stoppen mag dan.
Run
Interactief model
Bubble sort
Vergelijk buren en stop vroeg als er niets wisselt.
Start
We vergelijken steeds twee buren en swappen als ze verkeerd staan.
Onderzoek — strings en stabiliteit
Wat zie je?
- Strings komen alfabetisch te staan.
- Stabiliteit:
[(5, 'Noor'), (5, 'Bo'), (7, 'Sam'), (7, 'Ali')]. Sam stond vóór Ali en staat er nog steeds vóór. Bubble sort is stabiel: twee gelijke buren wisselen nooit, want de vergelijking is strikt>. Vergelijk je de hele tuple in plaats van alleen het cijfer, dan sorteert Python ook op naam en zie je hier niets.
Dat is een verschil met selection sort, die met dezelfde lijst Sam achter Ali zet.
Onderzoek — werk vergelijken
Wat doet bubble sort op verschillende soorten input?
Wat zie je?
Ongeveer:
al gesorteerd passes= 1 vergelijkingen= 49 swaps=0
omgekeerd passes=49 vergelijkingen= 1225 swaps=1225
willekeurig passes=~40 vergelijkingen=~1100 swaps=~600
bijna gesorteerd passes= 2 vergelijkingen= 97 swaps=1
- Al gesorteerd: één pass dankzij early-exit, dus
O(n). - Omgekeerd: het maximale werk,
O(n²). - Willekeurig: daartussenin, en dichter bij omgekeerd dan je zou denken.
- Bijna gesorteerd, met één wisseling nodig: één pass om die wisseling op te lossen en één om te bevestigen dat het klaar is. Zo snel dat bubble sort daar soms nog echt voor gebruikt wordt.
Door naar aanpassen.