O documento apresenta uma aula sobre o algoritmo de ordenação Insertion Sort ministrada pelo professor Daniel Arndt Alves. O documento discute os tópicos da aula, como o funcionamento do algoritmo, sua complexidade computacional quadrática e observações sobre seu comportamento.
1. Universidade Presbiteriana Mackenzie
Aula
4:
Inser-on
Sort
Prof. Ms. Daniel Arndt Alves
Faculdade
de
Computação
e
Informá-ca
Computação e Informática
Faculdade de
Estrutura
de
Dados
II
Daniel
Arndt
Alves
Inser/on
Sort
1
2. Tópicos
da
Aula
• Inser&on
Sort
• Complexidade
Computacional
• Observações
Daniel
Arndt
Alves
Inser/on
Sort
2
3. • Em
cada
etapa,
assume-‐se
que
o
vetor
está
dividido
em
duas
regiões:
– A
primeira
já
está
ordenada
– A
segunda
ainda
não
está
ordenada
• Escolhe-‐se
o
primeiro
elemento
da
região
não
ordenada
e
insere-‐se
o
mesmo
na
posição
correta
na
região
ordenada.
Insertion Sort
Daniel
Arndt
Alves
Inser/on
Sort
3
4. • Na
próxima
etapa
a
região
1,
ordenada,
terá
crescido
de
um
elemento
e
a
região
2,
por
ordenar,
terá
decrescido
de
um
elemento.
Insertion Sort
Daniel
Arndt
Alves
Inser/on
Sort
4
5. Inser&on
Sort
Daniel
Arndt
Alves
Inser/on
Sort
5
AO O R E N AD O R E Ni = 4
AO R D E N
62 3 4 51
i = 3 AO R D E N
AD E O R Ni = 5
AD E N O Ri = 6
RA D E N ORes.:
Chaves Iniciais
O R
AO R D E N
i = 2
10. Inser&on
Sort
/**
* Ordenar da posição início até à posição fim
*/
public void straightInsertionSort(int[] v, int inicio, int fim){
int j, i, temp;
for (j = inicio + 1; j <= fim; j++) {
i = j - 1;
temp = v[j];
// Mover para baixo enquanto for menor
while (temp < v[i]){
v[i+1] = v[i];
i = i - 1;
if(i < inicio)
break;
}
v[i+1] = temp;
}
return;
}
Daniel
Arndt
Alves
Inser/on
Sort
10
11. Inser&on
Sort
(Sobrecarga)
/**
* Ordenar as primeiras n posições
*/
public void straightInsertionSort(int[] v, int n){
straightInsertionSort(v, 0, n-1);
}
/**
* Ordenar o vetor inteiro
*/
public void straightInsertionSort(int[] v){
straightInsertionSort(v, 0, v.length-1);
}
Daniel
Arndt
Alves
Inser/on
Sort
11
12. Complexidade
Computacional
• Se
o
vetor
a
ordenar
possui
n
elementos,
então
o
algoritmo
realizará
n-‐1
etapas.
• Quantas
comparações
e
trocas
serão
realizadas?
– No
melhor
caso,
vetor
ordenado,
serão
realizadas
1
comparação
e
1
troca
por
etapa,
um
total
de
(n-‐1)
comparações
e
(n-‐1)
trocas
Daniel
Arndt
Alves
Inser/on
Sort
12
13. Complexidade
Computacional
• Quantas
comparações
e
trocas
serão
realizadas?
– No
pior
caso,
vetor
em
ordem
inversa,
serão
realizadas
sucessivamente
1,
2,
3,
...,
n-‐1
comparações
e
trocas.
• A
soma
dos
termos
dessa
progressão
aritmé/ca
será
– Pode
ser
demonstrado
que
para
um
vetor
aleatório,
o
número
aproximado
de
comparações
e
trocas
é
Daniel
Arndt
Alves
Inser/on
Sort
13
n2
2
n2
4
14. Complexidade
Computacional
• Portanto,
a
complexidade
deste
algoritmo
é
quadrá/ca
• Straight
Inser&on
Sort
– T
=
O(n2)
Daniel
Arndt
Alves
Inser/on
Sort
14
15. Observações
• A
inserção
do
item
em
uma
posição
adequada
na
sequência
de
des/no
é
realizada
com
a
movimentação
das
chaves
maiores
para
a
direita
e
então
é
feita
a
inserção
do
item
na
posição
vazia
Daniel
Arndt
Alves
Inser/on
Sort
15
16. Observações
• Vantagens:
– O
número
mínimo
de
comparações
e
movimentos
ocorre
quando
os
itens
já
estão
originalmente
ordenados
– O
número
máximo
ocorre
quando
os
itens
estão
originalmente
em
ordem
reversa,
o
que
indica
um
comportamento
natural
para
o
algoritmo
Daniel
Arndt
Alves
Inser/on
Sort
16
17. Observações
• O
algoritmo
é
estável,
isto
é,
os
registros
com
chaves
iguais
sempre
irão
manter
a
mesma
posição
rela/va
de
antes
do
início
da
ordenação
Daniel
Arndt
Alves
Inser/on
Sort
17