java.util.Arrays.sort(/* int[], char[], short[], byte[], boolean[] */)
est implémenté comme un «tri rapide réglé» plutôt que comme un tri radix.
J'ai fait une comparaison de vitesse il y a quelque temps, et avec quelque chose comme n> 10000, le tri radix était toujours plus rapide. Pourquoi?
Back2dos a tout dit, je vais juste essayer de clarifier davantage le point qui, selon moi, est le plus important:
Le tri Radix ne peut trier que les valeurs primitives réelles contenues dans le tableau, en fonction de leurs modèles de chiffres binaires. Dans des scénarios réels d'ingénierie logicielle du monde réel, ce cas n'est presque jamais rencontré . Ce que nous avons tendance à faire beaucoup plus souvent est de trier des tableaux de structures de données plus complexes (non primitives), et parfois nous trions des tableaux d'index vers d'autres entités.
Maintenant, un tableau d'index à d'autres entités est en fait un tableau de primitives, mais l'ordre de tri est fourni par l'interface de comparateur (et / ou délégué en C #) qui compare non pas les index, mais les entités indexées par les index. Ainsi, l'ordre de tri n'a absolument aucun rapport avec l'ordre des valeurs des primitives, et donc le tri radix est absolument inutile pour ce scénario.
Un exemple:
Nous avons un tableau de chaînes: [0] = "Mike", [1] = "Albert", [2] = "Zoro". Ensuite, nous déclarons un tableau d'index à ces chaînes: [0] = 0, [1] = 1, [2] = 2. Ensuite, nous trions le tableau d'index, en lui passant un comparateur qui compare non pas les index eux-mêmes, mais les chaînes réelles référencées par ces index. Après le tri, le tableau d'index résultant ressemblera à ceci: [0] = 1, [1] = 0, [2] = 2. Comme vous pouvez le voir, cet ordre de tri n'a rien à voir avec les modèles binaires des valeurs contenues dans le tableau, et pourtant en parcourant ce tableau d'index et en récupérant chaque chaîne correspondante, nous visitons les chaînes dans l'ordre trié.
la source