DAA - Tri Radix
Radix sortest une petite méthode que de nombreuses personnes utilisent intuitivement lors de l'alphabétisation d'une grande liste de noms. Plus précisément, la liste des noms est d'abord triée en fonction de la première lettre de chaque nom, c'est-à-dire que les noms sont organisés en 26 classes.
Intuitivement, on peut vouloir trier les nombres sur leur chiffre le plus significatif. Cependant, le tri Radix fonctionne de manière contre-intuitive en triant d'abord les chiffres les moins significatifs. Lors du premier passage, tous les nombres sont triés sur le chiffre le moins significatif et combinés dans un tableau. Ensuite, au deuxième passage, les nombres entiers sont à nouveau triés sur les deuxièmes chiffres les moins significatifs et combinés dans un tableau et ainsi de suite.
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
Une analyse
Chaque touche est regardée une fois pour chaque chiffre (ou lettre si les touches sont alphabétiques) de la touche la plus longue. Par conséquent, si la clé la plus longue am chiffres et il y a n clés, le tri de base a un ordre O(m.n).
Cependant, si nous regardons ces deux valeurs, la taille des clés sera relativement petite par rapport au nombre de clés. Par exemple, si nous avons des clés à six chiffres, nous pourrions avoir un million d'enregistrements différents.
Ici, on voit que la taille des clés n'est pas significative, et cet algorithme est de complexité linéaire O(n).
Exemple
L'exemple suivant montre comment le tri Radix fonctionne sur sept nombres à 3 chiffres.
Contribution | 1 er col | 2 ème passage | 3 ème passage |
---|---|---|---|
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 |
Dans l'exemple ci-dessus, la première colonne est l'entrée. Les colonnes restantes affichent la liste après des tris successifs sur des positions de chiffres de plus en plus significatives. Le code pour le tri Radix suppose que chaque élément d'un tableauA de n éléments a d chiffres, où chiffre 1 est le chiffre le plus bas et d est le chiffre d'ordre le plus élevé.