Prefixo pronto
Antes da iteração i, o trecho à esquerda contém exatamente os itens já lidos, em ordem não decrescente. O restante ainda não precisa obedecer a nenhuma ordem.
Construa uma região ordenada, inserindo cada item no lugar certo.
Execuções concluídas nesta bancada, medidas durante o playback ativo no navegador e salvas apenas neste dispositivo.
Execute o algoritmo até o fim para transformar esta bancada em uma série de medições reais.
Amplia a zona ordenada um item por vez. Cada barra representa um item; a cor quente marca a comparação atual e o verde calmo indica que uma posição já não precisa ser revisitada.
Ótimo para listas pequenas ou quase ordenadas.
Há comparações entre pares de itens ou varreduras repetidas. Por isso, cada aumento de entrada multiplica mais rapidamente o trabalho necessário.
Se a entrada dobra, o número de comparações pode ficar perto de quatro vezes maior.Escolha duas técnicas diferentes. As curvas usam a mesma escala visual para explicar como o custo tende a aumentar.
Use este par para observar por que O(n²) acumula trabalho mais depressa que O(n log n) quando a lista cresce. Merge Sort tende a crescer mais devagar do que Bubble Sort quando aumentam quantidade de itens (n). Isso descreve tendência assintótica, não mede o tempo do seu aparelho.
O Insertion Sort cresce um prefixo já ordenado. Em cada passo, ele retira a chave atual, abre uma lacuna deslocando apenas os elementos maiores e insere a chave na primeira posição compatível. Essa leitura local explica por que o algoritmo responde tão bem quando a entrada já está quase organizada.
Antes da iteração i, o trecho à esquerda contém exatamente os itens já lidos, em ordem não decrescente. O restante ainda não precisa obedecer a nenhuma ordem.
Ao deslocar somente valores maiores que a chave, nenhuma ordem válida do prefixo é perdida. Ao inserir a chave na lacuna, o prefixo cresce de tamanho e continua ordenado.
O índice avança uma posição por iteração. Quando alcança o fim, o prefixo coincide com o vetor completo; portanto, a sequência inteira está ordenada.
O algoritmo é adaptativo: não executa o mesmo volume de deslocamentos em todos os vetores de mesmo tamanho. Para um vetor ordenado, cada chave só confirma sua posição. Para um vetor invertido, cada nova chave atravessa todo o prefixo anterior.
>Se o loop desloca apenas valores estritamente maiores que a chave, dois itens iguais mantêm a ordem de chegada. Essa garantia é relevante quando a chave de ordenação é apenas um dos campos de um registro.
Use em coleções pequenas, fluxos quase ordenados ou como caso-base de algoritmos híbridos. Evite como estratégia principal para grandes coleções sem estrutura: Merge Sort, Heap Sort e Quick Sort robusto têm crescimento mais favorável nesses cenários.
O destaque acompanha o mesmo passo que você vê nas barras. Execute em câmera lenta para conectar intenção e efeito.
function insertionSort(items) { // Insert each value into the sorted region for (let i = 1; i < items.length; i++) { const current = items[i]; let j = i - 1; while (j >= 0 && items[j] > current) { items[j + 1] = items[j]; j--; } items[j + 1] = current; } return items;}Use quando os dados já chegam quase ordenados ou quando você precisa de uma implementação pequena e estável. A melhor forma de internalizar essa escolha é comparar o mesmo cenário com outras estratégias e observar como as métricas se comportam.
testar no modo corrida