Ga naar hoofdinhoud

Het complete algoritme

Leerdoel: je ziet alle bouwstenen samen en onderzoekt het algoritme.

Alles samen

def selection_sort(lijst):
n = len(lijst)
for i in range(n):
min_index = i
for j in range(i, n):
if lijst[j] < lijst[min_index]:
min_index = j
lijst[i], lijst[min_index] = lijst[min_index], lijst[i]
return lijst
  1. Regel 3:

    Bouwsteen 4 — de buitenste lus: plek i krijgt deze ronde zijn definitieve waarde.

  2. Regel 4-7:

    Bouwstenen 1 + 3 — zoek de index van de kleinste, maar alleen vanaf positie i: alles daarvóór staat al goed.

  3. Regel 8:

    Bouwsteen 2 — de swap zet de gevonden kleinste vooraan het ongesorteerde deel. Staat hij daar al (min_index == i), dan ruilt de regel hem onschuldig met zichzelf.

Run

Python
Code-omgeving wordt voorbereid…

Interactief model

Selection sort

Kies steeds het kleinste van de rest en zet het vooraan.

Bron referentieStap 0/26Vergelijkingen 0Swaps 0Resultaat -
05
12
28
31
44

Start

We zoeken telkens het kleinste element van het ongesorteerde deel.

Onderzoek

Probeer in elk geval:

  1. Sorteer een lijst met strings. Werkt dat?
  2. Sorteer een lijst met dubbele waardes. Wat gebeurt daarmee?
  3. Stabiliteit: sorteer leerlingen op hun cijfer. Twee leerlingen met hetzelfde cijfer: blijven die in de volgorde staan waarin ze in de lijst stonden?
Python
Code-omgeving wordt voorbereid…
Wat zie je?
  • Strings komen alfabetisch te staan; Python kan ze met < vergelijken.
  • Dubbele waardes komen naast elkaar te staan.
  • Stabiliteit: [(5, 'Noor'), (5, 'Bo'), (7, 'Ali'), (7, 'Sam')]. Sam stond vóór Ali, en staat nu erachter. Selection sort is niet stabiel: de swap in ronde 1 gooide Sam naar achteren, over Ali heen. Daarom vergelijkt de test alleen het cijfer (lijst[j][0]); vergelijk je de hele tuple, dan sorteert Python ook op naam en zie je hier niets.

Hoeveel werk doet dit?

LijstgrootteVergelijkingenSwaps die iets verplaatsen
515hoogstens 4
1055hoogstens 9
1005050hoogstens 99
1.000500.500hoogstens 999
10.00050.005.000hoogstens 9.999

Dit zijn de aantallen die de teller in de visualisatie ook laat zien. Vergelijkingen groeien kwadratisch (n(n + 1)/2, ongeveer n²/2). De swap-regel draait één keer per ronde, maar ruilt vaak een element met zichzelf; wat er echt verhuist groeit lineair. Voor grote lijsten is dat te traag: gebruik dan een beter sorteeralgoritme, zoals merge sort met O(n log n).

Maar voor educatieve doeleinden en kleine lijsten is selection sort prima.

Door naar aanpassen.