algoritmo: do Lat. algorithmos < Ár. alkharizmi: [Inform.] conjunto de etapas bem definidas necessárias para chegar à resolução de um problema.
January 11, 2006
Também conhecida como Insertion Sort, a Ordenação por Inserção consiste em inserir um elemento
num vetor já ordenado de
elementos. Neste artigo, apresento-lhes este simples algoritmo para ordenação de vetores.
O pseudocódigo da ordenação por inserção é o seguinte:
1. para j2 até comprimento do vetor, faça 2. elemento
vetor[j] 3. i
j - 1 4. enquanto i > 0 e vetor[i] > elemento, faça 5. vetor[i + 1]
vetor[i] 6. i
i - 1 7. fim-enquanto 8. vetor[i + 1]
elemento 9. fim-para
Para explicar eu vou fazer uma coisa que sempre faço para corrigir meus algoritmos, fingir que sou o programa, executando cada passo manualmente (claro que geralmente faço mais rápido, porque não preciso escrever tudo que faço). Vamos iniciar com o seguinte vetor v.
| v[1] | v[2] | v[3] | v[4] | v[5] | v[6] |
| 5 | 3 | 7 | 8 | 2 | 5 |
Aí o código me manda começar com
e iterar até o comprimento do vetor (6). A primeira ordem que ele me dá é para armazenar o elemento
(
) na variável elemento. Para facilitar toda a explicação eu vou sempre pintar de cinza o
onde eu estou (no caso, o segundo elemento do vetor, 3) e de preto o vetor ainda não ordenado (elementos
).
| v[1] | v[2] | v[3] | v[4] | v[5] | v[6] |
| 5 | 3 | 7 | 8 | 2 | 5 |
Então ele me diz que
. Portanto,
. E agora ele me faz um enquanto (que poderia ser substituído por para) onde meu i deverá ir diminuindo. Vamos entrar no loop...
Bom, meu
é maior que 0.
é maior que o
? Sim, então vamos entrar no corpo do enquanto... Aqui ele me manda fazer um
, que nesse caso é fazer um
.
| v[1] | v[2] | v[3] | v[4] | v[5] | v[6] |
| 5 | 5 | 7 | 8 | 2 | 5 |
E agora subtrae de i um valor. Portanto,
. Ele retorna ao enquanto, mas agora não satisfazemos a condição
, por isso saímos do enquanto. Então ele pede para
(
). Portanto, o vetor fica assim:
| v[1] | v[2] | v[3] | v[4] | v[5] | v[6] |
| 3 | 5 | 7 | 8 | 2 | 5 |
E incrementamos o j, agora
.
| v[1] | v[2] | v[3] | v[4] | v[5] | v[6] |
| 3 | 5 | 7 | 8 | 2 | 5 |


... E
? Não! Portanto, não entramos no enquanto.
(nenhuma mudança)
E lá vamos para
e continuando até que vamos ter o vetor ordenado:
| v[1] | v[2] | v[3] | v[4] | v[5] | v[6] |
| 2 | 3 | 5 | 5 | 7 | 8 |
Como eu já disse na introdução, mas lá sem grandes explicações, a Ordenação por Inserção divide o vetor em dois. O primeiro (de elementos
) contém todos seus valores ordenados e o segundo (de elementos
) contém os valores que devem ser inseridos no primeiro vetor já ordenado (por isso ele se chama Algoritmo de Inserção).
A chave do algoritmo é o enquanto que acontece para ir deslocando todos os elementos para seu índice
enquanto o elemento for menor que eles (para depois o elemento ser colocado onde parou).
A variável elemento só serve para não perdermos o valor de
(porque depois fazemos
quando
)
Acredito que não tenham restado dúvidas. Dê mais uma olhada no algoritmo e tente implementar. Se tiver dificulade, coloque mensagens de debug estratégicas para entender o algoritmo. (ex.: no início do para coloque para imprimir o valor de j e no início de cada enquanto coloque para imprimir os valores elemento, i e v[i])
Você deve ter percebido que este algoritmo não tem um custo fixo. Se todo o vetor estiver ordenado, ele nunca precisará iterar o
e portanto será executado bem mais rápido do que se o vetor estiver inteiro em ordem decrescente (quando ele sempre precisará iterar
até o fim - 0). Então, neste artigo, gostaria-lhes de apresentar a análise de algoritmos baseada em casos. Para este programa, dizemos que:


Em alguns programas o caso médio é importante também, mas não é o caso da ordenação por inserção. Vemos que há uma diferença bem grande entre o custo dos dois casos. Por isso, precisamos conhecer onde que nosso algoritmo será implementado e quais as chances de ele ser o melhor ou pior caso. Em geral, o pior caso é o mais comum... Por isso, diremos que o custo deste algoritmo é
.
Por hoje é isso aí... Espero que vocês tenham gostado. Qualquer dúvida, não hesitem em perguntar! Ah... E comentem e sugiram para os próximos artigos!
Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais
Quando teremos artigos sobre grafos?:D
Acho que daqui a uns 5 artigos. Só vou acabar os algoritmos de ordenação e já vou pra eles. ![]()
Já me perdi a muito tempo nos teus artigos. ![]()
Poderia citar uns exemplos em JS ou até mesmo em PHP, seria bem melhor. ![]()
Dae Cosme…
Exatamente onde que você se perdeu? O que você não entendeu? Que aí eu reforço esse ponto escrevendo um novo artigo ou editando o mesmo. Acho que o único artigo que ficou meio complexo foi o “Análise de Algoritmos” (segundo o Zé, foi escrito para estudantes de Ciência da Computação). Mas é que aquilo ali é questão de se acostumar. Você pra começar a usar algoritmos, não precisa nem pensar em custo se não quiser também!
Aguardo sua resposta!
[…] O artigo está em outro local agora: Ordenação por inserção […]
Você e muito fera!
Estou fazendo um curso técnico de micro informatica
e estou aprendendo algoritmo.
e com esse site você tem me ajudado bastante…
Não deveria ser;
“enquanto i > = ( IGUAL ) 0 e vetor[i] > elemento, faça”
???
Está correto, desculpe.
Este design foi copiado do CSS Zen Garden e modificado com autorização de seu autor, Gunta Klavina.
Todo o conteúdo deste site (incluindo textos, imagens, arquivos de áudio e quaisquer outros trabalhos), exceto quando especificado o contrário, está licenciado por Tiago Madeira sob uma Licença Creative Commons.