Pular para conteúdo

Selection Sort

O Selection sort encontra o menor elemento do sufixo não ordenado e o troca com a próxima posição da saída.

static void selectionSort(int[] values) {
    for (int destination = 0; destination < values.length - 1; destination++) {
        int minimum = destination;
        for (int scan = destination + 1; scan < values.length; scan++) {
            if (values[scan] < values[minimum]) minimum = scan;
        }
        int temporary = values[destination];
        values[destination] = values[minimum];
        values[minimum] = temporary;
    }
}

Antes de cada iteração externa, o prefixo anterior a destination contém os menores valores originais em suas posições finais ordenadas. Selecionar o mínimo do sufixo restante estende esse invariante em uma posição.

O Selection sort realiza n(n - 1)/2 comparações nos casos melhor, médio e pior; portanto, o tempo é Θ(n²). Ele usa espaço auxiliar Θ(1) e no máximo n - 1 trocas. Esta implementação comum não é estável, pois uma troca a longa distância pode mover um item para depois de outro com a mesma chave. Pode ser útil quando escritas custam muito mais do que comparações, mas seu uso é principalmente pedagógico.