Académique Documents
Professionnel Documents
Culture Documents
RadixSort
Algoritmo de ordenao por distribuio que ordena com base nos dgitos de um nmero
prioriza (inicia por) dgitos menos significativos
o nmero mximo de iteraes do algoritmo depende do nmero mximo de dgitos (p) que um nmero pode ter (p pequeno, em geral)
RadixSort
Restries
ordena elementos numricos inteiros
m depende do conjunto de dgitos (m = 10, em geral)
Exemplo
ordenao dos 80 empregados da empresa pelo seu tempo de servio (em anos)
n = 80 m = 10 p = 2 (0 a 99)
RadixSort - Funcionamento
Utiliza dois vetores auxiliares:
vOcor (nmero de ocorrncias de elementos) vTemp (temporrio - mantm os elementos do
vetor ordenados por um certo dgito)
RadixSort - Funcionamento
0 1 2 3 4 5 6 7
m = 10 p=2
0 1
17
31 22 95 41 1a
80 27 45
vetor
vOcor
+
0
1+
...
3 4
0
0
1
1
3
2
4
3
4
4
80 31 41
0 1 2
22 95 45
3 4 5
17 27
6 7
vTemp
vetor
RadixSort - Funcionamento
0 1 2 3 4 5 6 7
m = 10 p=2
0
80
41
95 2a
17
ve r to
vOcor
+
0
1+
.. .
3 4
contabiliza os offsets
5 6 7 8 9
6 6 6 6 7 vOcor ordena vetor pelo dgito mais vTemp 9 5 vTemp transfere os dados de v T emp p avetor ar 45
5
22
0 1 2
31
3 4
17 22 27 31 41 45 80 95
vetor
or e n o d ad !
RadixSort - Implementao
Classe OrdenadorRadixSort SubClasse de Ordenador incio m, p inteiro; vOcor, vTemp inteiro[ ]; construtor OrdenadorBucketSort (m inteiro, p inteiro); incio this.m m; this.p p; vOcor NOVO inteiro[m]; vTemp NOVO inteiro[n]; fim; ... fim;
4. 5.
com base nestes offsets, vTemp recebe os elementos do vetor ordenado pelo i-simo dgito transfere-se os elementos de vTemp para vetor
RadixSort Etapa 1
1. Inicializa vOcor com zero
complexidade: O(m . p)
vOcor
RadixSort Etapa 2
2. Varre vetor e contabiliza o nmero de ocorrncias de cada i-simo dgito em vOcor
complexidade: O(n . p)
0 1 2 3 4 5 6 7
17 31 22
95 41 80 27
45
vetor
vOcor
RadixSort Etapa 3
3. Contabiliza os offsets em vOcor
complexidade: O(m . p)
vOcor
+
0
1+
...
3 4 5 6 7 8 9
vOcor
RadixSort Etapa 4
4. Ordena vetor em vTemp com base nos offsets em vOcor
complexidade: O(n . p)
0 1 2 3 4 5 6 7 8 9
0
0
1
1
3
2
4
3
4
4 5
4
6
6
7
vOcor
17 31 22
95 41 80 27
45
vetor
80 31 41
22 95 45
17 27
vTemp
RadixSort Etapa 5
Transfere os dados de vTemp para vetor
complexidade: O(n . p)
80 31 41
22 95 45
17 27
vTemp
80 31 41
22 95 45
17 27
vetor
RadixSort - Complexidade
Complexidades envolvidas:
O(m.p) e O(n.p) O(p (m + n)) considerando que m e p so pequenos
(para um sistema decimal, tem-se em geral: m = 10 e p <<= 10), sua complexidade
Exerccio
Implementar para a classe OrdenadorRadixSort:
ordena()