A leszámláló rendezést használhatjuk a Radix rendezés segédeljárásaként.
A kulcsok $r$ alapú számrendszerben felírt, $d$ számjegyű, előjel nélküli
egész
számok. Ez lesz a $dDigitNumber$ típus. Ha kell vezető nullákat írunk a számok elé,
hogy $d$
számjegyű legyen.
A leszámláló rendezés stabil rendezés, azaz az azonos kulcsú elemek
egymáshoz
viszonyított sorrendjét megőrzi. Továbbá tömbökre hatékony, lineáris műveletigényű,
nem
helyben rendező és nem összehasonlító rendezés.
A leszámláló rendezés egy számjegy szerint rendezi a tömb elemeit. A Radix
rendezés
fogja biztosítani azt, hogy a legkevésbé fontos számjegytől a legfontosabb számjegyig mindegyik
számjegyre lefuttassa a leszámláló rendezést.
Az alapötlet az, hogy minden egyes bemeneti elemre meghatározzuk azoknak az
elemeknek
a számát, amelyek kisebbek, mint a bemeneti elemünk. Ezzel az információval a bemeneti elemünket
közvetlenül a saját pozíciójába tudjuk helyezni a kimeneti tömbben. Ha például 17 olyan elem van,
amelyik kisebb, mint a bemeneti elemünk, akkor a 18. helyre fog kerülni a kimeneti tömbben.
Működése:
Két tömbünk lesz, $A$ és $B$, kezdetben $A$-ban vannak a rendezendő elemek, $B$
lesz
az eredmény tömb. Egy számjegy szerinti rendezés két menetből áll.
Az első menetben megszámoljuk, hogy a kulcs $k$-adik helyiértékén melyik
számjegyből
mennyi van. Majd a $C$ számláló tömbön végrehajtjuk az összesítést. Ekkor $C[i]$ azt mutatja, hogy
$0..i$ számjegyekből összesen mennyi volt a kulcsok k-adik helyiértékén.
A második menetben kerülnek helyükre a kulcsok. Az $A$ tömbből a $B$ tömbbe
másoljuk
őket. Ha $A[i]$ kulcs $k$-adik számjegye $j$, akkor $C[j]$ adja meg a kulcs helyét a $B$ tömbben. Ha
több kulcsban is $j$ áll a $k$-adik helyiértéken, akkor az utolsónak a helyét mutatja $C[j]$. Ezért
a
helyre rakásnál az $A$ tömböt fordítva járjuk be.
Műveletigény:
A leszámláló rendezés műveletigénye $\Theta (n + r)$, így az egész rendezésé (a
radix
rendezéssel együtt), $\Theta (d(n + r))$. Mivel azonban az $r$ és a $d$ is konstans, a költség
átírható
$\Theta (n)$-re.