DAA - Radix Sort

Radix sorté um pequeno método que muitas pessoas usam intuitivamente ao colocar em ordem alfabética uma grande lista de nomes. Especificamente, a lista de nomes é primeiro classificada de acordo com a primeira letra de cada nome, ou seja, os nomes são organizados em 26 classes.

Intuitivamente, pode-se desejar classificar os números em seus dígitos mais significativos. No entanto, a classificação Radix funciona contra a intuição, classificando os dígitos menos significativos primeiro. Na primeira passagem, todos os números são classificados no dígito menos significativo e combinados em uma matriz. Em seguida, na segunda passagem, os números inteiros são classificados novamente nos segundos dígitos menos significativos e combinados em uma matriz e assim por diante.

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

Análise

Cada tecla é examinada de uma só vez para cada dígito (ou letra, se as teclas forem alfabéticas) da tecla mais longa. Portanto, se a chave mais longa tiverm dígitos e há n chaves, radix sort tem ordem O(m.n).

No entanto, se olharmos para esses dois valores, o tamanho das chaves será relativamente pequeno quando comparado ao número de chaves. Por exemplo, se temos chaves de seis dígitos, podemos ter um milhão de registros diferentes.

Aqui, vemos que o tamanho das chaves não é significativo e este algoritmo é de complexidade linear O(n).

Exemplo

O exemplo a seguir mostra como a classificação Radix opera em sete números de 3 dígitos.

Entrada 1 r passagem 2 nd passagem 3 rd passagem
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

No exemplo acima, a primeira coluna é a entrada. As colunas restantes mostram a lista após classificações sucessivas na posição de dígitos cada vez mais significativos. O código para classificação Radix assume que cada elemento em uma matrizA do n elementos tem d dígitos, onde dígito 1 é o dígito de ordem mais baixa e d é o dígito de ordem mais alta.