Vous êtes sur la page 1sur 8

UFSC-CTC-INE INE5384 - Estruturas de Dados

Ordenao de Dados (V)

Prof. Ronaldo S. Mello 2002/2

RadixSort
Algoritmo de ordenao por distribuio que ordena com base nos dgitos de um nmero
prioriza (inicia por) dgitos menos significativos

Comparao com o BucketSort


contabiliza tambm ocorrncias de elementos melhor desempenho mdio
m no est associado a um valor mximo previsto para um conjunto de elementos e sim ao conjunto de dgitos que podem existir em um nmero
Sistema decimal: m = 10 (m pequeno!)

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)

elementos no ultrapassam um nmero de dgitos p

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

iterao: p = 1 (contabiliza ocorrncias do dgito menos significativo)


2 3 4 5 6 7 8 9

vOcor

+
0

1+

...
3 4

contabiliza os offsets (posio do 1o elemento com o dgito)


5 6 7 8 9

0
0

1
1

3
2

4
3

4
4

4 6 6 8 8 vOcor ordena vetor pelo dgito menos significativo em vTemp


5 6 7

80 31 41
0 1 2

22 95 45
3 4 5

17 27
6 7

vTemp

transfere os dados de vTemp para vetor 80 31 41 22 95 45 17 27

vetor

RadixSort - Funcionamento
0 1 2 3 4 5 6 7

m = 10 p=2
0

80

41

95 2a

17

ve r to

iterao: p = 2 (contabiliza ocorrncias do dgito mais significativo)


1 2 3 4 5 6 7 8 9

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;

RadixSort Mtodo Ordena


Realiza p iteraes. Na i-sima iterao:
1. 2. 3. inicializa vOcor com zero vOcor recebe o nmero de ocorrncias de cada i-simo dgito uma vez preenchido o vOcor, so contabilizados nele os offsets para cada dgito
(posies onde iniciam os elementos que possuem um certo valor de dgito)

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

assumida como linear no nmero de dados

Complexidade do RadixSort: O(n)

Exerccio
Implementar para a classe OrdenadorRadixSort:
ordena()

Vous aimerez peut-être aussi