java.util.Arrays.sort(/* int[], char[], short[], byte[], boolean[] */)
wird eher als 'tuned quicksort' als als radix sort implementiert.
Ich habe vor einiger Zeit einen Geschwindigkeitsvergleich durchgeführt und mit n> 10000 war die Radix-Sortierung immer schneller. Warum?
Back2dos hat alles gesagt, ich werde nur versuchen, den Punkt weiter zu klären, den ich für das Wichtigste halte:
Radix-Sortierung kann nur die tatsächlichen Grundwerte, die im Array enthalten sind, basierend auf ihren Binärziffernmustern sortieren. In realen Szenarien der Softwareentwicklung tritt dieser Fall fast nie auf . Viel häufiger sortieren wir Arrays komplexerer (nicht primitiver) Datenstrukturen, und manchmal sortieren wir Arrays von Indizes nach anderen Entitäten.
Nun ist ein Array von Indizes zu anderen Entitäten tatsächlich ein Array von Grundelementen, aber die Sortierreihenfolge wird von der Komparatorschnittstelle (und / oder dem Delegat in C #) bereitgestellt, die nicht die Indizes, sondern die durch die Indizes indizierten Entitäten vergleicht. Somit hat die Sortierreihenfolge absolut keine Beziehung zur Reihenfolge der Werte der Grundelemente, und daher ist die Radix-Sortierung für dieses Szenario absolut unbrauchbar.
Ein Beispiel:
Wir haben eine Reihe von Zeichenfolgen: [0] = "Mike", [1] = "Albert", [2] = "Zoro". Dann deklarieren wir ein Array von Indizes zu diesen Zeichenfolgen: [0] = 0, [1] = 1, [2] = 2. Dann sortieren wir das Array von Indizes und übergeben es einem Komparator, der nicht die Indizes selbst vergleicht, sondern die tatsächlichen Zeichenfolgen, auf die diese Indizes verweisen. Nach dem Sortieren sieht das resultierende Array von Indizes folgendermaßen aus: [0] = 1, [1] = 0, [2] = 2. Wie Sie sehen, hat diese Sortierreihenfolge nichts mit den Binärmustern der im Array enthaltenen Werte zu tun. Durch Durchlaufen dieses Array von Indizes und Abrufen der entsprechenden Zeichenfolgen werden die Zeichenfolgen jedoch in sortierter Reihenfolge aufgerufen.
quelle