Menu
Coddy logo textTech

Tri radix

Dernière mise à jour

Le tri radix est un tri sans comparaison pour les entiers. Au lieu de comparer les valeurs, il trie les nombres chiffre par chiffre. La version du chiffre le moins significatif (LSD) traite d'abord le chiffre des unités, puis des dizaines, puis des centaines, en utilisant un tri par comptage stable à chaque chiffre. Comme chaque passe est stable, une fois le chiffre le plus significatif traité, tout le tableau est trié. Appuyez sur lecture ci-dessus pour voir chaque passe de chiffre réorganiser les barres.

Le tri radix s'exécute en temps O(d·(n + k)), où d est le nombre de chiffres et k la base (10 ici). Pour des entiers de largeur fixe, c'est quasiment linéaire - il peut battre les tris par comparaison en O(n log n) - mais il ne fonctionne que sur des données décomposables en chiffres ou en clés.

Complexité temporelle et spatiale

CasComplexitéNotes
TempsO(d·(n + k))d chiffres, base k (linéaire pour d fixe)
EspaceO(n + k)Tableau de sortie + comptages de chiffres
StableOuiChaque passe de chiffre est un tri par comptage stable
Comparaison ?NonTrie par chiffre, sans comparer les valeurs
Fonctionne surEntiers/clésPas sur des objets comparables généraux

Étape par étape

ÉtapeCe qui se passe
1Trouver la valeur maximale pour connaître le nombre de chiffres à traiter.
2Commencer par le chiffre le moins significatif (les unités).
3Trier le tableau de façon stable selon ce chiffre avec un tri par comptage.
4Passer au chiffre plus significatif suivant.
5Répéter jusqu'à traiter toutes les positions de chiffres.

Exemple détaillé

Tri de [170, 45, 75, 90, 2, 24, 66] :

PasseTableauAction
Début[170, 45, 75, 90, 2, 24, 66]Le maximum est 170, donc trois passes de chiffres sont nécessaires.
Unités[170, 90, 2, 24, 45, 75, 66]Tri stable selon le chiffre des unités : 0, 0, 2, 4, 5, 5, 6.
Dizaines[2, 24, 45, 66, 170, 75, 90]Tri stable selon le chiffre des dizaines : 0, 2, 4, 6, 7, 7, 9 (170 garde son avance sur 75).
Centaines[2, 24, 45, 66, 75, 90, 170]Tri stable selon le chiffre des centaines ; seul 170 a un 1, il passe donc en dernier. Trié.

Quand utiliser le tri radix

À utiliser quandÀ éviter quand
Les clés sont des entiers ou des chaînes de longueur fixe que vous pouvez découper en chiffres.Vous devez trier des objets arbitraires avec un comparateur personnalisé.
Les clés ont un nombre de chiffres d petit et borné, si bien que O(d·(n + k)) bat O(n log n).Les clés sont très longues ou non bornées, rendant d grand et les passes coûteuses.
Vous avez besoin d'un tri stable et pouvez vous permettre O(n + k) d'espace supplémentaire.La mémoire est limitée et les tampons O(n + k) sont inacceptables.
La plage de valeurs ou la base k est modérée par rapport à n.k est énorme, de sorte que chaque passe de tri par comptage domine le temps d'exécution.

Code de Radix Sort

Une implémentation propre et exécutable de Radix Sort en Python, JavaScript, Java, C++, C. Choisissez un langage, copiez le code ou ouvrez-le préchargé dans le Playground Coddy.

Code de Radix Sort en Python

Python
1def radix_sort(a):2    # Sort by each decimal digit, least significant first3    max_value = max(a)4    exp = 15    while max_value // exp > 0:6        a = sort_by_digit(a, exp)7        exp *= 108    return a9
10
11def sort_by_digit(a, exp):12    buckets = [[] for _ in range(10)]13    for value in a:14        digit = (value // exp) % 1015        buckets[digit].append(value)16    # Concatenating buckets 0..9 keeps the sort stable17    return [value for bucket in buckets for value in bucket]18
19
20nums = [170, 45, 75, 90, 802, 24, 2, 66]21print("Before:", nums)22print("After: ", radix_sort(nums))
Exécutez ce code dans le Playground Python

FAQ sur le tri radix

Quelle est la complexité temporelle du tri radix ?
Le tri radix est en O(d·(n + k)), où d est le nombre de chiffres et k la base. Pour des entiers de largeur fixe, c'est quasiment O(n), ce qui peut être plus rapide que les tris par comparaison. Il utilise O(n + k) d'espace supplémentaire.
Le tri radix est-il stable ?
Oui. Le tri radix LSD repose sur un tri par comptage stable à chaque chiffre ; c'est cette stabilité qui permet à l'approche chiffre par chiffre de produire un résultat correctement trié.
Quand puis-je utiliser le tri radix ?
Le tri radix fonctionne sur des données décomposables en chiffres ou en clés de taille fixe, comme des entiers ou des chaînes de longueur fixe. Ce n'est pas un tri par comparaison générique, il ne peut donc pas trier des objets arbitraires avec un comparateur personnalisé.
En quoi le tri radix diffère-t-il du tri par comptage ?
Le tri par comptage trie selon une seule clé en une passe et nécessite un tableau de comptage aussi grand que la plage de valeurs, ce qui le dégrade quand les valeurs sont dispersées. Le tri radix applique le tri par comptage chiffre par chiffre, gardant petit le tableau de comptage de chaque passe (base k), ce qui lui permet de gérer de grandes plages de valeurs que le tri par comptage simple ne pourrait pas.
Pourquoi le tri radix LSD commence-t-il par le chiffre le moins significatif ?
Commencer par le chiffre le moins significatif permet à chaque passe stable de préserver l'ordre établi par tous les chiffres moins significatifs précédents. Lorsque le chiffre le plus significatif est traité, les égalités sur ce chiffre sont déjà correctement ordonnées par les chiffres inférieurs, si bien que le tableau finit entièrement trié. Trier d'abord par le chiffre le plus significatif briserait cela et exigerait une approche récursive différente (tri radix MSD).
Le tri radix peut-il gérer les nombres négatifs ?
Pas directement - l'extraction de chiffres de base suppose des entiers non négatifs. Les correctifs courants consistent à décaler toutes les valeurs en ajoutant le minimum pour que tout soit non négatif, ou à trier séparément les négatifs et les non-négatifs puis à les concaténer. Ignorer cela est un bug fréquent lorsqu'on applique le tri radix à des données réelles.
Coddy programming languages illustration

Maîtrisez les algorithmes avec Coddy

COMMENCER