[c++] unsigned int
Geplaatst: za 21 mar 2009, 19:05
Voor school moeten een radix sort implementeren voor unsigned ints. Het komt er op neer bij radix sort dat je de getallen gaat opdelen in groepen volgens een bepaalde radix (bij radix 10 zou je dus groepen maken van getallen die beginnen met 0, 1, 2, ... 9). Daarna zou je elk van deze groepen opnieuw bekijken en daar opnieuw die regel op toepassen om zo de volgende groep te maken, ... (tot daar mijn korte uitleg over radix sort).
Nu bestaat een unsigned int in c++ uit 4 bytes. Ik gebruik nu elke byte om op te delen in groepen. Voor de meeste beduidende byte krijgen we dus radix = 256. We gaan de elementen dus opdelen in groepen van 256. Wanneer ik dit nu doe voor een tabel van 10 elementen is de kans groot dat alle elementen in een aparte groep belanden (wat ook zo is), als we nu de groepen in juiste volgorde sorteren kunnen we enkel uit de hoogste byte al de juiste volgorde halen. (Zo kan je de getallen 3454,4333,1222 ook sorteren door alleen naar de eerste getallen te kijken vermits de 3 getallen in een andere groep zouden belanden).
Goed, alle getallen zitten in een aparte groep, de groepen worden correct gesorteerd, maar tot mijn verbazing zijn de getallen zelf niet gesorteerd!
Klein voorbeeldje:
Iemand die een verklaring kan geven waarom ik die groepen krijg voor die getallen?
Nu bestaat een unsigned int in c++ uit 4 bytes. Ik gebruik nu elke byte om op te delen in groepen. Voor de meeste beduidende byte krijgen we dus radix = 256. We gaan de elementen dus opdelen in groepen van 256. Wanneer ik dit nu doe voor een tabel van 10 elementen is de kans groot dat alle elementen in een aparte groep belanden (wat ook zo is), als we nu de groepen in juiste volgorde sorteren kunnen we enkel uit de hoogste byte al de juiste volgorde halen. (Zo kan je de getallen 3454,4333,1222 ook sorteren door alleen naar de eerste getallen te kijken vermits de 3 getallen in een andere groep zouden belanden).
Goed, alle getallen zitten in een aparte groep, de groepen worden correct gesorteerd, maar tot mijn verbazing zijn de getallen zelf niet gesorteerd!
Klein voorbeeldje:
Code: Selecteer alles
byte getal
89 1625
40 21544
200 32200
177 11953
202 7626
113 26993
88 8280
0 16384
34 7714
223 28127
Na sorteren:
0 16384
34 7714
40 21544
88 8280
89 1625
113 26993
177 11953
200 32200
202 7626
223 28127