DECMATRIX

Ferramentas Matemáticas

Insertion Sort
i
Insira até 21 números inteiros de -999 a 999, separados por vírgulas.
5
0
1
-3
8
2
2
3
4
-2
2
5

Passos:

Execute o algoritmo para ver os passos gravados.

Nenhum passo registrado ainda.
LentoRápido

Código

O Insertion Sort é um algoritmo de ordenação que constrói a parte ordenada da lista um elemento por vez. A cada passo ele remove um elemento da parte não ordenada do array e o insere na posição correta da parte já ordenada, deslocando os demais elementos para a direita.

Complexidade: No pior caso e no caso médio (lista em ordem inversa ou aleatória), a complexidade de tempo é O(n²). No melhor caso (lista já ordenada), o algoritmo apenas percorre a lista uma vez sem precisar deslocar elementos, resultando em complexidade de tempo O(n). Assim como o Bubble Sort, ele é um algoritmo in-place com complexidade de espaço O(1).

1const insertionSort = (arr) => {
2    // Assume que a primeira posição já está ordenada
3    for (let i = 1; i < arr.length; i++) {
4        let j = i;
5        
6        // Troca com o elemento da esquerda enquanto for menor
7        while (j > 0 && arr[j - 1] > arr[j]) {
8            [arr[j - 1], arr[j]] = [arr[j], arr[j - 1]];
9            j--;
10        }
11    }
12    return arr;
13};

Definição do Insertion Sort

O Insertion Sort (Ordenação por Inserção) constrói a lista ordenada progressivamente, um elemento de cada vez. É semelhante a organizar cartas de baralho na mão: você pega uma carta do monte desordenado e a encaixa na posição correta entre as cartas que já estão em ordem.

Como o Insertion Sort Funciona

  1. O primeiro elemento (índice 0) é considerado já ordenado.
  2. Pegue o próximo elemento da parte não ordenada — este é o elemento atual.
  3. Compare-o com os elementos à sua esquerda, movendo-se da direita para a esquerda.
  4. Enquanto o elemento à esquerda for maior, troque-os de posição, empurrando os maiores para a direita.
  5. Quando nenhuma troca for mais necessária, o elemento atual está na posição correta. Repita para todos os elementos restantes.

Aplicações e Uso Real

Diferente do Bubble Sort, o Insertion Sort tem muita utilidade no mundo real. Embora seja ineficiente para listas gigantes e totalmente desordenadas, ele é incrivelmente rápido para listas pequenas (menos de 50 itens) ou dados que já estão quase ordenados. Por causa dessa eficiência cirúrgica, linguagens como Python e Java usam algoritmos híbridos (como o TimSort), que dividem listas imensas em pedaços pequenos e acionam o Insertion Sort por baixo dos panos para ordenar esses fragmentos na velocidade da luz.

Propriedades do Insertion Sort

  1. Complexidade de tempo: O pior caso (lista invertida) e o caso médio têm uma complexidade de tempo de O(n²). No entanto, sua grande vantagem brilha no melhor caso: quando a lista já está ordenada ou quase ordenada, a complexidade despenca para O(n), pois ele faz apenas uma comparação por elemento e quase nenhuma troca.
  2. Complexidade de espaço: É um algoritmo in-place (in-loco). Ele reordena os elementos movendo-os dentro do próprio array original, precisando apenas de uma variável temporária para as trocas. Portanto, sua complexidade de espaço é O(1).
  3. Estabilidade: O Insertion Sort é um algoritmo estável. Se dois elementos possuírem o mesmo valor, o algoritmo não os inverterá de lugar, preservando perfeitamente a ordem relativa original.

FAQ

01. O Insertion Sort é melhor que o Bubble Sort?

02. O que significa dizer que ele é um algoritmo 'adaptativo'?

03. Por que ele sempre começa a varredura a partir do segundo elemento (índice 1)?

04. Quando eu devo escolher usar o Insertion Sort nos meus projetos?

Decmatrix - Seu toolkit matemático open-source para cálculos, conversões e mais.
Termos de Uso
Política de Privacidade
Contato: decimatrix25@gmail.com