Ordenação por inserção
Monta uma parte ordenada à esquerda, um valor por vez. Cada novo valor é tirado da lista e vai para a esquerda até encontrar um valor menor.
- Ω(n)
- Θ(n²)
- O(n²)
- O(1)
- sim
- sim
Melhor caso: como o tempo cresce com o tamanho n da lista quando a entrada é a mais fácil para este algoritmo.
Caso médio: como o tempo costuma crescer com n. Com n², o dobro de valores leva cerca de quatro vezes mais tempo; n log n cresce bem menos.
Pior caso: o crescimento com a entrada mais difícil. Útil quando a velocidade nunca pode cair.
Memória: quanta memória extra é necessária além da lista. 1 significa algumas variáveis; n, uma cópia da lista.
Estável: dois valores iguais mantêm a ordem original. Importa ao ordenar por um só campo de um registro.
Sem memória extra: ordena dentro da própria lista, sem uma segunda lista.
- comparando
- movendo
- na mão
- parte ordenada
- na posição final
Experimente: Escolha uma lista quase ordenada. Quase nada se desloca, por isso termina em muito poucos passos.
Como funciona
A parte da esquerda está sempre ordenada. Você tira o próximo valor, cada valor maior da parte ordenada se desloca uma posição para a direita e o valor entra no espaço vazio. É assim que muita gente organiza as cartas na mão.
Quando é uma boa escolha
Uma boa escolha para listas curtas e para listas quase ordenadas, em que ele é muito rápido. Bibliotecas de ordenação reais o usam nos pedaços pequenos da lista, dentro de métodos mais rápidos.