Het examenprogramma voor informatica eist dat je een aantal algoritmen moet kunnen reproduceren. In dit hoofdstuk en de volgende worden deze gepresenteerd. Een aantal zijn heel erg simpel, maar jouw taak is om het stap voor stap uit te leggen zodat het direct geprogrammeerd zou kunnen worden. Een aantal van de opdrachten vind je dan ook terug in de cursussen javascript en php programmeren.
In deze paragraaf worden drie sorteeralgoritmen gepresenteerd "bubble sort", "quick sort", "insertion sort". Je kunt ze ook testen samen met de standaard sorteer methode die javascript voor lijsten biedt.
bron: wikipedia
Bubble sort, soms ook exchange sort of sinking sort genoemd, is een eenvoudig sorteeralgoritme. Het wordt vaak gebruikt als illustratie van een algoritme. Het is een simpel, maar inefficiënt algoritme, vaak gekozen ter illustratie vanwege de eenvoud en omdat het gemakkelijk uit te leggen is.
Bubble sort werkt als volgt (flowchart in rechter figuur):
We zien (zie linker figuur) de grotere elementen als het ware als luchtbellen naar boven drijven. Aan deze metafoor ontleent het algoritme zijn naam.
bron: wikipedia
Quicksort is een recursief sorteeralgoritme bedacht door Tony Hoare. Hij werkte destijds aan een project in verband met computervertalingen. Daarvoor was het nodig om korte Russische zinnen snel en efficiënt te sorteren. Het algemene werkingsprincipe van quicksort wordt weleens kort omschreven als verdeel en heers.
Het doel van quicksort is om een rij van ongesorteerde getallen, gesorteerd terug te geven. Dit gebeurt in 4 stappen.
Voor partitioneren | Na partitioneren |
Hierbij zijn de volgende zaken vermeldenswaardig. In stap 2 wordt een willekeurig element gekozen. Iedere keuze van de spil leidt tot een werkend algoritme. Het willekeurig kiezen van de spil leidt praktisch tot de beste resultaten, al geeft dit enkele theoretische nadelen. Zo is het moeilijk om het algoritme te analyseren. Bovendien voldoet een algoritme dat een willekeurige stap bevat niet aan de striktere definities van een algoritme. In stap 3 wordt niet gespecificeerd hoe deze stap door een computer uitgevoerd moet worden. Er zijn verschillende implementaties waarvan die van Nico Lomuto op wikipedia wordt gepresenteerd. Het exacte verloop van deze stap wordt onder de kop partitionering besproken. In stap 4 roept het algoritme zichzelf op. Quicksort is dus een recursief algoritme.
bron: wikipedia
Het begint door de eerste twee elementen uit de set te sorteren. Als deze op hun plaats staan, voegen we het derde element op de juiste plaats toe. Dit doen we totdat we alle elementen op hun plaats hebben gezet.
Dit is eigenlijk de manier waarop een speler zijn kaarten schikt bij een kaartspel. Vandaar dat deze routine ook de Cardsort genoemd wordt.
Het vergelijken van de snelheid van sorteeralgoritmes is altijd leuk geweest. Het is duizenden malen uitgevoerd,
tijd en energie kostend. Maar je moet het ook zelf eens proberen. Behalve dat het leuk is, is het vergelijken van
de snelheid van sorteer algoritmen erg nuttig voor toepassingen. Bedrijven en organisaties moeten heel vaak
data sorteren. Het is dus nuttig de beste methode te vinden. De code voor deze test is te vinden in
sorteer.js. De graphics en de tabel
worden door code in deze bladzijde verzorgd.
Het begrijpen van deze code vergroot zeker jouw kennis van programmeren.
Probeer deze bladzijde ook eens uit in verschillende browsers op dezelfde computer.
Er zijn grote verschillen.
Simulatie van de sorteeralgoritmen | |
---|---|
Geef aantal elementen. | |
Geef aantal simulaties | |