# Dingen op volgorde zetten [Programmeergidsen](LEESMIJ.md) **Sorteren** betekent onderdelen in een gekozen volgorde zetten. Je kunt getallen van klein naar groot zetten of scores van hoog naar laag. Kies eerst de regel. Er is niet één ‘goede volgorde’ voor elke taak. Dit is een artikel voor een volgende stap. Probeer eerst [lijsten](../syntaxis/lijst.md), [indexen](../syntaxis/indexeren.md) en [zolang-lussen](../syntaxis/zolang.md). Lees rustig en volg de kaartjes op papier. ## Verwissel kaartjes naast elkaar Schrijf 4, 1, 3 en 2 op vier kaartjes. Vergelijk twee buren. Is het linker getal groter? Verwissel ze dan. Ga één plaats naar rechts en herhaal dit. Na één tocht langs de rij staat het grootste getal achteraan. Herhaal de tocht. Na verschillende tochten kan de hele rij gesorteerd zijn. Deze aanpak heet **bubbelsorteren**, of **bubble sort**. Hij is makkelijk te laten zien, maar niet de snelste aanpak voor grote verzamelingen. ## Sorteer vier getallen ```pliro # taal: nl laat getallen = [4, 1, 3, 2] laat ronde = 0 zolang ronde < lengte(getallen) - 1: laat index = 0 zolang index < lengte(getallen) - 1: als getallen[index] > getallen[index + 1]: laat bewaard = getallen[index] zet getallen[index] = getallen[index + 1] zet getallen[index + 1] = bewaard zet index = index + 1 zet ronde = ronde + 1 voor getal in getallen: zeg getal ``` `bewaard` onthoudt de eerste waarde terwijl twee vakjes worden verwisseld. De binnenste lus maakt één tocht langs de rij. De buitenste lus herhaalt die tocht drie keer voor vier onderdelen. Deze eenvoudige versie bekijkt ook paren die al goed staan. ## Voorspel en probeer Na de eerste tocht staan de kaartjes als 1, 3, 2, 4. Is de rij dan al helemaal gesorteerd? De uiteindelijke uitvoer is: ```text 1 2 3 4 ``` ## Jouw uitdaging Probeer `[3, 1, 3, 2]`. Beide drieën moeten blijven bestaan. Probeer daarna een lijst die al gesorteerd is. Waarom hoeft dan niets te worden verwisseld? De code kan ook een lege lijst verwerken zonder een ontbrekend vakje te lezen. ## Een veelgemaakte fout Het linker vakje vervangen voordat je de oude waarde bewaart, laat een getal verdwijnen. Een andere fout is de laatste index bezoeken en daarna `index + 1` opvragen. Die plaats ligt buiten de lijst. De `- 1` in de binnenste voorwaarde voorkomt dat. ## Verder leren [Algoritmen](algoritmen.md) · [Indexen](../syntaxis/indexeren.md) · [Testen](testen.md)