Ausgehend von den oben genannten Bedingungen gestalltet sich die Implementierung sehr einfach. Die data variable ist die Adresse des Originalarrays, welches
zu sortieren ist. Nach dem das größte Element ausfindig gemacht wurde, werden die zwei temporären Arrays mit Hilfe der Funktion ``malloc'' erstellt. Natürlich
sollte man ernsthaft den Rückgabewert dieser Funktion auf NULL überprüfen; dies geschieht in der hier gezeigten Funktion der übersichtlichkeithalber nicht.
Alle Felder des count-arrays werden dann auf 0 initializiert. Darauf folgt das erfaßen der Häufigkeiten und letztlich das Aufsummieren. Anschliesend
folgt die Sortierung, wobei ihr Ergebnis in das tmp-array gespeichert wird. Dieses Array wird eins zu eins in das Originalfeld zurückkopiert, worauf die
Funktion, nach dem sie noch die zwei temporären Felder frei gegeben hat, zum Aufrufer zurückkehrt und der Algorithmus terminiert.
Wie schon erwähnt, kann man für Datenmengen, die nur aus ganzen positiven Zahlen bestehen, eine andere Vorgehensweise des CountingSorts implementieren. Nach
dem die Häufigkeitsinformation gesammelt wurde, lässt sich ohne das Aufsummieren und Schreiben eines Temporärarrays tmp arbeiten.
Das letztere fällt gänzlich weg. Der Clue hier ist, daß die Indizes selbst als Elemente benutz werden, da die Elemente selbst Zahlen sind.
Angemerkt sei, daß in den beiden hier vorgestellten Implementierungen keine Überprüfung des Rückgabewertes der Funktion ``malloc'' stattfindet. Dies sollte
in einer ernsthaften Verwendung des Algorithmus geschen, da diese Funktion durchaus fehlschlagen kann und in diesem Falle ``NULL'' liefert, um so einen Fehler zu signalisieren.
Nächste Seite
Aufwärts
Vorherige Seite
Inhalt
Nächste Seite: Optimierung
Aufwärts: CoutingSort
Vorherige Seite: Laufzeitkomplexität
Inhalt
2002-05-09