Pular para conteúdo

Insertion Sort

O Insertion sort expande um prefixo ordenado. Ele remove o próximo valor, desloca para a direita os elementos maiores do prefixo e insere o valor no espaço resultante.

static void insertionSort(int[] values) {
    for (int i = 1; i < values.length; i++) {
        int current = values[i];
        int j = i - 1;
        while (j >= 0 && values[j] > current) {
            values[j + 1] = values[j];
            j--;
        }
        values[j + 1] = current;
    }
}

Antes da iteração i, o prefixo values[0..i) está ordenado e contém exatamente os elementos do prefixo original. A inserção preserva esse invariante. O melhor caso é Θ(n); os casos médio e pior são Θ(n²). O algoritmo usa espaço auxiliar Θ(1) e é estável.