Escolar Documentos
Profissional Documentos
Cultura Documentos
2
Introdução
■ Existem diversos algoritmos utilizados para a
ordenação de dados
■ Cada um apresenta características
específicas, com vantagens e desvantagens
■ Veremos um destes algoritmos: ordenação
de dados por distribuição de chaves
3
1 Origem
■ Também conhecido como Radixsort,
Algoritmo das Raízes e Indexação Direta
■ Criado para máquinas de ordenação de
cartões perfurados
■ Resistiu ao tempo e foi utilizado em
computadores digitais
4
2 Base
■ Diferente dos outros métodos de ordenação
que usam comparação e troca
■ Se baseia em duas características do
sistema numérico arábico:
– Princípio da Limitação de Dígitos
– Princípio do Valor pela Posição
5
2.1 Princípio da Limitação de Dígitos
■ O número de dígitos (caracteres) usados
numa base numérica é limitado
■ A quantidade de números que podem
representar quando combinados é infinita
Base Numérica Dígitos (Caracteres)
Decimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Binária 0, 1
Hexadecimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
6
2.1 Princípio da Limitação de Dígitos
■ O algoritmo já “conhece” a ordem correta dos
dígitos da base numérica (decimal)
■ Logo, pode ordenar um vetor com dados de
no máximo um dígito
7
2.2 Princípio do Valor pela Posição
■ O valor de cada dígito muda de acordo com a
posição em que ocupa no número
■ Exemplos:
Base Valor do Dígito na Posição
N 3 2 1
(N – 1) 2 1
B Dígito * B Dígito * B Dígito * B Dígito * 1
(N – 1)
Decimal Dígito * 10 Dígito * 100 Dígito * 10 Dígito * 1
(N – 1)
Binária Dígito * 2 Dígito * 4 Dígito * 2 Dígito * 1
(N – 1)
Hexadecimal Dígito * 16 Dígito * 256 Dígito * 16 Dígito * 1
■ Logo, qualquer dígito à direita representa mais
que qualquer dígito à esquerda
8
2.3 Aplicando os Dois Princípios
■ Inicia-se ordenando os dados pelo dígito da posição
1 (menos significativo)
■ Para essa ordenação é usado um algoritmo baseado
no Princípio da Limitação de Dígitos
■ Passa-se então para a ordenação pelo dígito da
posição 2, depois 3 e assim por diante, até o número
máximo de dígitos que os dados podem ter
9
3 Algoritmo
■ Um exemplo de algoritmo em português estruturado e a sua
aplicação sobre um vetor exemplo
■ 3.1 Código
Programa Principal:
Início
Para cada posição começando pela 1 até a máxima que
as chaves podem ter {
Ordenar o vetor pelo dígito dessa posição;
}
Fim.
10
3.1 Código
Subrotina
Ordenar Vetor pelo Dígito da Posição X:
Início
Criar um vetor chamado Fila, da posição 0
até a 9, de filas;
Para cada elemento do Vetor {
F = Obter o dígito desse elemento na
Posição X;
Colocar esse elemento na Fila F;
}
11
3.1 Código
A Posição Atual do Vetor é o início;
Para Y = 0 até 9 {
Colocar cada elemento da Fila[Y] no
Vetor a partir da Posição Atual;
A Posição Atual do Vetor é o seu
próprio valor somado ao tamanho da
Fila[Y];
}
Fim;
12
3.2 Aplicação
■ Vetor exemplo a ser ordenado:
Posição Dado (Chave)
1 15
2 2
3 21
4 11
5 8
6 1
7 30
8 9
9 10
10 6 13
3.2 Aplicação
■ Passo 1:
Programa Principal:
Início
Para cada posição começando pela 1 até
a máxima que as chaves podem ter {
Ordenar o vetor pelo dígito dessa
posição;
}
14
3.2 Aplicação
■ Passo 2:
Subrotina
Ordenar Vetor pelo Dígito da Posição X:
Início
Criar um vetor chamado Fila, da posição
0 até a 9, de filas;
15
3.2 Aplicação
■ O Vetor de filas “Fila” criado:
Fila Elementos
0
1
2
3
4
5
6
7
8
9 16
3.2 Aplicação
■ Passo 3:
Para cada elemento do Vetor {
F = Obter o dígito desse elemento na
Posição X;
Colocar esse elemento na Fila F;
}
17
3.2 Aplicação
■ Ao fim do laço:
Fila Elementos
0 30, 10
1 21, 11, 1
2 2
3
4
5 15
6 6
7
8 8
9 9 18
3.2 Aplicação
■ Passo 4:
Para Y = 0 até 9 {
Colocar cada elemento da Fila[Y] no
Vetor a partir da Posição Atual;
A Posição Atual do Vetor é o seu
próprio valor somado ao tamanho da
Fila[Y];
}
Fim;
19
3.2 Aplicação
■ Vetor ordenado pelas unidades:
Posição Dado (Chave)
1 30
2 10
3 21
4 11
5 1
6 2
7 15
8 6
9 8
10 9 20
3.2 Aplicação
■ Passo 5:
– Com o fim da subrotina de ordenação por dígito,
volta-se ao programa principal e é encerrada a
primeira volta do laço descrito no Passo 1
– Segue-se o que foi descrito nos Passos 2 e 3,
mas com o parâmetro da rotina de ordenação por
dígito 2
21
3.2 Aplicação
■ Vetor ordenado pelas unidades e dezenas:
Fila Elementos
0 1, 2, 6, 8, 9
1 10, 11, 15
2 21
3 30
4
5
6
7
8
9 22
3.2 Aplicação
■ Passo 6:
– É repetido o processo do passo 4, que forma o
vetor novamente a partir das filas
– É o fim da subrotina e volta-se ao programa
principal
– Como foi atingido o número máximo de dígitos (2)
é o fim do laço e do programa
23
3.2 Aplicação
■ Vetor ordenado ao fim do programa:
Posição Dado (Chave)
1 1
2 2
3 6
4 8
5 9
6 10
7 11
8 15
9 21
10 30 24
4 Vantagens e Desvantagens
■ Utiliza pouco processamento (comparações)
em relação aos outros algoritmos
■ Rápido para dados com poucos dígitos
25
Conclusão
■ Deve ser utilizado em situações específicas,
como por exemplo:
– Quando se sabe o antecipadamente o tamanho
máximo dos dados
– Quando o número de dígitos dos dados não é
muito grande
■ Se usado em situações genéricas a eficiência
pode não corresponder ao desejado
26