Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos de ordenação:
Bucketsort, Radixsort e
Seleção
Algoritmos e Estruturas de Dados I
Natália Batista
nataliabatista@cefetmg.br
1º semestre/ 2022
1. Introdução (1/5)
2
1. Introdução (1/5)
3
2. Ordenação por distribuição
4
2. Ordenação por distribuição
Algoritmo:
Fonte: https://hypescience.com/existem-mais-combinacoes-em-um-
baralho-de-cartas-do-que-estrelas-no-universo/
5
2. Ordenação por distribuição
6
3. Bucketsort
Considere uma sequência de n itens cujas chaves são
inteiros no intervalo [0, N-1].
As chaves são usadas como índices em um arranjo de
buckets B que tem entradas de 0 a N-1.
Um item com chave k é armazenado no bucket B[k].
Após inserir cada item em seu bucket, pode-se colocar
os itens de volta na sequência de forma ordenada pela
enumeração do conteúdo dos buckets B[0], B[1], ... ,
B[N-1].
Fonte: https://en.wikipedia.org/wiki/Bucket_sort
7
4. Radixsort
8
4. Radixsort
Fonte: CLRS.
9
4. Radixsort
Algoritmo (CLRS): considere que cada
elemento do vetor A possui d dígitos, onde o
dígito 1 é o menos significativo e o dígito d é o
mais significativo. O vetor A possui n
elementos.
Radix-Sort(A, d)
for i=1 to d
use um algoritmo de ordenação estável para ordenar o vetor A pelo dígito i
10
4. Radixsort
11
4. Radixsort
12
5. Estabilidade
Um método de ordenação é estável se a ordem
relativa dos itens com chaves iguais não se altera
durante a ordenação.
Alguns dos métodos de ordenação mais eficientes não
são estáveis.
Exemplo:
Se uma lista alfabética de nomes de funcionários de
uma empresa é ordenada pelo campo salário, então
um método estável produz uma lista em que os
funcionários com mesmo salário aparecem em ordem
alfabética.
13
5. Estabilidade
14
6. Classificação dos métodos de ordenação
15
7. Algoritmos de ordenação interna
16
7. Algoritmos de ordenação interna
17
7. Algoritmos de ordenação interna
Exemplos:
Ordenação por seleção.
Ordenação por inserção.
Bubblesort.
Shellsort.
Mergesort.
Quicksort.
Heapsort.
18
7. Algoritmos de ordenação interna
19
7. Algoritmos de ordenação interna
Notação utilizada:
Os algoritmos trabalham sobre os registros de um
arquivo.
Cada registro possui uma chave utilizada para
controlar a ordenação.
Podem existir outros componentes em um
registro.
20
7. Algoritmos de ordenação interna
Estrutura de um registro:
typedef long TipoChave;
typedef struct TipoItem {
TipoChave Chave;
/∗ outros componentes ∗/
} TipoItem ;
22
8. Ordenação por seleção
23
8. Ordenação por seleção
O método é ilustrado abaixo:
24
8. Ordenação por seleção
25
8. Ordenação por seleção
Anel interno
Contém um comando de decisão, com um
comando apenas de atribuição.
Ambos levam tempo constante para serem
executados.
O tempo para incrementar o índice do anel e
avaliar sua condição de terminação é O(1).
26
8. Ordenação por seleção
gasto no anel é
O((n-i)x1) = O(n - i),
conforme regra do produto para a notação O.
27
8. Ordenação por seleção
Anel externo:
Contém, além do anel interno, quatro comandos de
atribuição:
O(max(1, (n - i), 1, 1, 1)) = O(n - i).
O anel externo é executadao n-1 vezes, e o tempo
total para executar o programa está limitado ao
produto de uma constante pelo somatório de (n - i):
(Ziviani)
28
8. Ordenação por seleção
Se considerarmos o número de comparações
como a medida de custo relevante, o programa
faz n2/2 + n/2 comparações para ordenar n
elementos.
Considerarmos o número de movimentos de
registros, o programa realiza exatamente 3(n–1)
movimentações.
29
8. Ordenação por seleção
Fonte: Ziviani.
30
8. Ordenação por seleção
Vantagens:
Custo linear para o número de movimentos de registros.
É o algoritmo a ser utilizado para arquivos com registros
muito grandes.
É muito interessante para arquivos com um número
pequeno de registros.
Desvantagens:
O fato de o arquivo já estar ordenado não ajuda em
nada, pois o custo continua quadrático.
O algoritmo não é estável.
31
8. Ordenação por seleção
Exemplo:
1 2 3 4 5
32
Referências
Cormen, T. et al. Introduction to Algorithms. MIT
Press, 2009.
Goodrich, M. T. e Tamassia, R. Estruturas de
Dados & Algoritmos. Editora Bookman, 2013.
Loureiro, A. A. F. Projeto e Análise de Algoritmos:
Análise de Complexidade. Notas de aula, 2010.
Menotti, D. Ordenação. Notas de aula, 2009.
Ziviani, N. Projeto de algoritmos: com
implementações em Java e C++. 3 ed. Editora
Cengage Learning, 2007.
33