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	
  
Tópicos	
  da	
  Aula	
  
•  Inser&on	
  Sort	
  
•  Complexidade	
  Computacional	
  
•  Observações	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   2	
  
•  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	
  
•  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	
  
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
Inser&on	
  Sort	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   6	
  
Inser&on	
  Sort	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   7	
  
Inser&on	
  Sort	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   8	
  
Inser&on	
  Sort	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   9	
  
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	
  
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	
  
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	
  
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
Complexidade	
  Computacional	
  
•  Portanto,	
  a	
  complexidade	
  deste	
  algoritmo	
  é	
  
quadrá/ca	
  
•  Straight	
  Inser&on	
  Sort	
  
– T	
  =	
  O(n2)	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   14	
  
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	
  
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	
  
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	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   18	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   19	
  
Imagens	
  
•  h`p://www.caelum.com.br/imagens/curso/cs14-­‐imagem.jpg	
  	
  
•  h`p://www.showmesavings.com/images/target.gif	
  	
  
•  h`p://sandersconsul/ng.com/Portals/58319/images/checklist.jpg	
  	
  
•  h`p://www.classichitspaulista.com.br/wp-­‐content/uploads/2010/12/correios-­‐triagem.jpg	
  	
  
•  h`p://www.blackboard.com/resources/connec/ons/SEARCH-­‐1.jpg	
  	
  
•  h`p://sta/c.howstuffworks.com/gif/how-­‐to-­‐plant-­‐trees-­‐shrubs-­‐and-­‐vines-­‐47.jpg	
  	
  
•  h`p://ffodissahnerak.files.wordpress.com/2007/11/grafo.gif	
  	
  
•  h`p://xpress.superpedido.com.br/Imagens/Capas200502/8536301236.jpg	
  	
  
•  h`p://imagem.buscape.com.br/capas/livros/205/031/190x190_8560031502.jpg	
  	
  
•  h`p://d.yimg.com/gg/u/7a62d58d03887ad0ea7e52fa078e0c0de7b19db6.jpeg	
  	
  
•  h`p://www.computertrainingpa`aya.com/images/big-­‐/ck.jpg	
  	
  
•  h`p://dbestwebdeveloper.com/pinoy-­‐website-­‐developer/wp-­‐content/uploads/
2010/07/12282598707YbD6m.jpg	
  	
  
•  h`p://lake.k12.fl.us/moe/lib/moe/test.jpg	
  	
  
•  h`p://acccbuzz.files.wordpress.com/2010/12/grade.jpg	
  	
  
•  h`p://www.vshandw.com/images/icon.informa/on.gif	
  	
  
•  h`p://cs.bloomington.k12.mn.us/modules/groups/homepagefiles/cms/1597624/Image/Icons/
calendar+icon3.png	
  	
  
•  h`p://www.goldb.org/goldblog/cmg_images/real_programmers_binary.jpg	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   20	
  
Obrigado	
  
	
  
Daniel	
  Arndt	
  Alves	
  
daniel.alves@mackenzie.br	
  
Daniel	
  Arndt	
  Alves	
   Inser/on	
  Sort	
   21	
  

Insertion Sort

  • 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
  • 6.
    Inser&on  Sort   Daniel  Arndt  Alves   Inser/on  Sort   6  
  • 7.
    Inser&on  Sort   Daniel  Arndt  Alves   Inser/on  Sort   7  
  • 8.
    Inser&on  Sort   Daniel  Arndt  Alves   Inser/on  Sort   8  
  • 9.
    Inser&on  Sort   Daniel  Arndt  Alves   Inser/on  Sort   9  
  • 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  
  • 18.
    Daniel  Arndt  Alves   Inser/on  Sort   18  
  • 19.
    Daniel  Arndt  Alves   Inser/on  Sort   19  
  • 20.
    Imagens   •  h`p://www.caelum.com.br/imagens/curso/cs14-­‐imagem.jpg     •  h`p://www.showmesavings.com/images/target.gif     •  h`p://sandersconsul/ng.com/Portals/58319/images/checklist.jpg     •  h`p://www.classichitspaulista.com.br/wp-­‐content/uploads/2010/12/correios-­‐triagem.jpg     •  h`p://www.blackboard.com/resources/connec/ons/SEARCH-­‐1.jpg     •  h`p://sta/c.howstuffworks.com/gif/how-­‐to-­‐plant-­‐trees-­‐shrubs-­‐and-­‐vines-­‐47.jpg     •  h`p://ffodissahnerak.files.wordpress.com/2007/11/grafo.gif     •  h`p://xpress.superpedido.com.br/Imagens/Capas200502/8536301236.jpg     •  h`p://imagem.buscape.com.br/capas/livros/205/031/190x190_8560031502.jpg     •  h`p://d.yimg.com/gg/u/7a62d58d03887ad0ea7e52fa078e0c0de7b19db6.jpeg     •  h`p://www.computertrainingpa`aya.com/images/big-­‐/ck.jpg     •  h`p://dbestwebdeveloper.com/pinoy-­‐website-­‐developer/wp-­‐content/uploads/ 2010/07/12282598707YbD6m.jpg     •  h`p://lake.k12.fl.us/moe/lib/moe/test.jpg     •  h`p://acccbuzz.files.wordpress.com/2010/12/grade.jpg     •  h`p://www.vshandw.com/images/icon.informa/on.gif     •  h`p://cs.bloomington.k12.mn.us/modules/groups/homepagefiles/cms/1597624/Image/Icons/ calendar+icon3.png     •  h`p://www.goldb.org/goldblog/cmg_images/real_programmers_binary.jpg   Daniel  Arndt  Alves   Inser/on  Sort   20  
  • 21.
    Obrigado     Daniel  Arndt  Alves   daniel.alves@mackenzie.br   Daniel  Arndt  Alves   Inser/on  Sort   21