Você está na página 1de 29

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS

Algoritmos de ordenação:
Inserção e Shellsort

Algoritmos e Estruturas de Dados I


Slides adaptados dos slides do livro texto (Ziviani) e dos slides de aula dos professores Davi
Menotti (DECOM/UFOP) e Antônio Alfredo Ferreira Loureiro (DCC/UFMG).

Natália Batista
nataliabatista@cefetmg.br

1º semestre/ 2022
1. Ordenação por inserção
 Algoritmo utilizado pelo jogador de cartas:
 As cartas são ordenadas da esquerda para
direita uma por uma.
 O jogador escolhe a segunda carta e verifica
se ela deve ficar antes ou na posição que está.
 Depois a terceira carta é classificada,
deslocando-a até sua correta posição.
 O jogador realiza esse procedimento até
ordenar todas as cartas

Fonte:http://cae.ucb.br/conteudo/programar/
labor1/new_ordenacaoepesquisa.html

2
1. Ordenação por inserção

 Algoritmo:
 Em cada passo a partir de i=2 faça:
 Selecione o i-ésimo item da sequência fonte.
 Coloque-o no lugar apropriado na sequência destino de
acordo com o critério de ordenação.

3
1. Ordenação por inserção
 O método é ilustrado abaixo:

 As chaves em negrito representam a sequência


destino.
4
1. Ordenação por inserção

 Considerações sobre o algoritmo:


 O processo de ordenação pode ser terminado
pelas condições:
 Um item com chave menor que o item em consideração
é encontrado.
 O final da sequência destino é atingido à esquerda.
 Solução: utilizar um registro sentinela na posição
zero do vetor.

5
1. Ordenação por inserção

6
1. Ordenação por inserção
 Sentinela: na posição zero do vetor é colocado o
próprio registro em consideração.
0 1 2 3 4 5 6

Chaves iniciais O R D E N A
i=2 R O R D E N A
i=3 D D O R E N A
i=4 E D E O R N A
i=5 N D E N O R A
i=6 A A D E N O R

7
1. Ordenação por inserção

 Seja C(n) a função que conta o número de


comparações.
 No anel mais interno (while), na i-ésima
iteração, o valor de Ci é:

8
1. Ordenação por inserção
 Melhor caso: vetor já está ordenado.
 Ci (n) = 1
0 1 2 3 4 5 6

Chaves iniciais A D E N O R
i=2 D A D E N O R
i=3 E A D E N O R
i=4 N A D E N O R
i=5 O A D E N O R
i=6 R A D E N O R

9
1. Ordenação por inserção
 Pior caso: vetor em ordem decrescente.
 Ci (n) = i
0 1 2 3 4 5 6

Chaves iniciais R O N E D A
i=2 O O R N E D A
i=3 N N O R E D A
i=4 E E N O R D A
i=5 D D E N O R A
i=6 A A D E N O R

10
1. Ordenação por inserção
 Caso médio: assume que todas as
permutações de n são igualmente prováveis.

11
1. Ordenação por inserção
 O anel mais externo (for) realiza n-1 iterações:

 Logo, o número de comparações é igual a:

12
1. Ordenação por inserção

 Seja M (n) a função que conta o número de


movimentações de registros.
 O número de movimentações na i-ésima
iteração é:

13
1. Ordenação por inserção

M
O
V
I
M
E
N
Ci(n)-1: subtrai 1
T pois faz uma
A comparação a
Ç
Õ mais para sair
E do while.
S

14
1. Ordenação por inserção
 O número total de movimentações é calculado por:

15
1. Ordenação por inserção
 Exemplo de pior caso:

16
1. Ordenação por inserção

 O número mínimo de comparações e


movimentos ocorre quando os itens estão
originalmente em ordem.
 Para arquivos já ordenados o algoritmo descobre,
a um custo O(n), que cada item já está no seu
lugar.
 O número máximo ocorre quando os itens
estão originalmente na ordem reversa.

17
1. Ordenação por inserção

 É o método a ser utilizado quando o arquivo


está “quase” ordenado.
 É um bom método quando se deseja
adicionar uns poucos itens a um arquivo
ordenado, pois o custo é linear.
 O algoritmo de ordenação por inserção é
estável.

18
2. Shellsort
 Proposto por Shell em 1959.
 É uma extensão do algoritmo de ordenação por
inserção.
 Problema com o algoritmo de ordenação por inserção:
 Troca itens adjacentes para determinar o ponto de inserção.
 São efetuadas n − 1 comparações e movimentações para
encontrar ponto de inserção quando o menor item está na
posição mais à direita no vetor.
 O método de Shell contorna este problema permitindo
trocas de registros distantes um do outro.

19
2. Shellsort

 Itens que estão separados h posições são


rearranjados de tal forma que todo h-ésimo
item leva a uma sequência ordenada.
 Ordenação por inserção através de
incrementos decrescentes.

20
2. Shellsort
 Exemplo de utilização:

Posições 1 e 5 / 2 e 6

Posições 1, 3 e 5 / 2, 4 e 6

Corresponde ao inserção.

Observação: usando a sequência h = 1, 2, 4.

21
2. Shellsort
 Como escolher o valor de h:

h(s) = 1, para s = 1.
h(s) = 3*h(s - 1) + 1, para s > 1.

 A sequência para h corresponde a 1, 4, 13, 40, 121,


364, 1.093, 3.280, ...
 Knuth (1973) mostrou experimentalmente que esta
sequência é difícil de ser batida por mais de 20% em
eficiência.
22
2. Shellsort

23
2. Shellsort

 Quando h = 1, o Shellsort corresponde ao


algoritmo de inserção.

24
2. Shellsort

 Porque o Shellsort é mais eficiente?


 A razão da eficiência do algoritmo ainda não é
conhecida.
 Sabe-se que cada incremento não deve ser
múltiplo do anterior.
 Várias sequências para h foram experimentadas.

25
2. Shellsort

 A implementação do Shellsort não utiliza


registros sentinelas.
 Seriam necessários h registros sentinelas,
uma para cada h-ordenação.

26
2. Shellsort

 Conjecturas referentes ao número de


comparações para a sequência de Knuth:

27
2. Shellsort

 Vantagens:
 Shellsort é uma ótima opção para arquivos de
tamanho moderado (± 10000 itens).
 Sua implementação é simples e requer uma
quantidade de código pequena.
 Desvantagens:
 O tempo de execução do algoritmo é sensível à
ordem inicial do arquivo.
 O método não é estável.

28
Referências
 Ziviani, N. Projeto de algoritmos: com
implementações em Java e C++. 3 ed. Editora
Cengage Learning, 2007.
 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.

29

Você também pode gostar