DAA - Radix Sort

Radix sortist eine kleine Methode, die viele Leute intuitiv verwenden, wenn sie eine große Liste von Namen alphabetisieren. Insbesondere wird die Liste der Namen zuerst nach dem ersten Buchstaben jedes Namens sortiert, dh die Namen sind in 26 Klassen angeordnet.

Intuitiv könnte man Zahlen nach ihrer höchstwertigen Ziffer sortieren wollen. Die Radix-Sortierung funktioniert jedoch kontraintuitiv, indem zuerst nach den niedrigstwertigen Ziffern sortiert wird. Beim ersten Durchgang werden alle Zahlen nach der niedrigstwertigen Ziffer sortiert und in einem Array zusammengefasst. Beim zweiten Durchgang werden dann die gesamten Zahlen erneut nach den zweitniedrigsten Stellen sortiert und in einem Array kombiniert und so weiter.

Algorithm: Radix-Sort (list, n) 
shift = 1 
for loop = 1 to keysize do 
   for entry = 1 to n do 
      bucketnumber = (list[entry].key / shift) mod 10 
      append (bucket[bucketnumber], list[entry]) 
   list = combinebuckets() 
   shift = shift * 10

Analyse

Jede Taste wird einmal für jede Ziffer (oder jeden Buchstaben, wenn die Tasten alphabetisch sind) der längsten Taste gesucht. Daher, wenn der längste Schlüssel hatm Ziffern und es gibt n Schlüssel, Radix Sort hat Ordnung O(m.n).

Wenn wir uns jedoch diese beiden Werte ansehen, ist die Größe der Schlüssel im Vergleich zur Anzahl der Schlüssel relativ klein. Wenn wir beispielsweise sechsstellige Schlüssel haben, könnten wir eine Million verschiedene Datensätze haben.

Hier sehen wir, dass die Größe der Schlüssel nicht signifikant ist und dieser Algorithmus von linearer Komplexität ist O(n).

Beispiel

Das folgende Beispiel zeigt, wie die Radix-Sortierung mit sieben dreistelligen Zahlen funktioniert.

Eingang 1 st Pass 2 nd Pass 3 rd Pass
329 720 720 329
457 355 329 355
657 436 436 436
839 457 839 457
436 657 355 657
720 329 457 720
355 839 657 839

Im obigen Beispiel ist die erste Spalte die Eingabe. Die verbleibenden Spalten zeigen die Liste nach aufeinanderfolgenden Sortierungen an immer wichtigeren Stellen. Der Code für die Radix-Sortierung setzt voraus, dass jedes Element in einem Array enthalten istA von n Elemente hat d Ziffern, wo Ziffer 1 ist die niedrigste Ziffer und d ist die Ziffer höchster Ordnung.