Der Trick, der auch die Beschränkungen erklärt, ist das Verwenden der Werte der Elemente als Indizes in der Tempoärmenge. Beim Zählen der Häufigkeiten wird ein Element mit dem Wert k benutzt, um im counts-array das k-te Elemente um eins zu inkrementieren.
Wie in der Zeichnung ersichtlich wird, benutzt der CountingSort die Elemente selbst als Indizes in einem anderen Array. Nun ist auch erkennbar wieso das Hilfsarray, in der Lage sein muss, MAX + 1 Elemente aufzunehmen. Wird das größte Elemente aus der Originalmenge zur Indizierung des Hilfsarrays benutzt, so kommt es zu keinem Fehlzugriff, da das Array groß genug ist. Das ``+ 1'' erklärt sich dadurch, daß, erstens, die Menge die 0 enthalten kann, und, zweitens, Arrays in C orientierten Sprachen ``nullindiziert'' angesprochen werden. Beim Sammeln der Information über die Häufigkeit der Elemente wird im count-array durch das Element indizierte Feld inkrementiert.
Im count-array ist nun angegeben wie oft, ein Element mit dem Wert 0, mit dem Wert 1, ...mit dem Wert MAX in der Originalmenge vorkommt. Auf einem Array bestehend nur aus Zahlen würde es reichen, das count-array zu durchgehen und der Reihe nach die Indizes in die Originalmenge, so oft wie im count[k] angegeben, nacheinander zukopieren (siehe Abschnitt Optimierung). Handelt es sich jedoch um Elemente, die aus komplexen Sturkturen aufgebaut sind, so das diese einfachen Methode nicht ausreicht, ist ein Kopiervorgang der Originalelemente erforderlich. Dazu werden die Häufigkeiten aufaddiert. Die Summe in einem bestimmen Feld counts[k] gibt somit an, wieviele Elemente vor das k-Element gehoeren. Somit gibt der Wert die absolute Position des Elements an. Das Aufbauen des sortierten Feldes erfolgt jedoch in einem zweiten temporären Feld der Größe des Originalfeldes, um ein überschreiben der noch benötigten Elemente zu vermeiden. Schliesslich wird die temporäre Menge in das originale Feld kopiert, womit der Algorithmus terminiert.
Nächste Seite: Laufzeitkomplexität
Aufwärts: CoutingSort
Vorherige Seite: Bedingungen
Inhalt