DECMATRIX

Ferramentas Matemáticas

Selection 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 Selection Sort divide o array em duas partes: uma já ordenada (à esquerda) e outra ainda não ordenada (à direita). A cada iteração, o algoritmo varre toda a parte não ordenada em busca do menor elemento. Ao encontrá-lo, realiza uma única troca, posicionando esse elemento no início da parte não ordenada. A barreira entre as duas partes avança uma posição, e o processo se repete até que todo o array esteja ordenado.

Complexidade: O Selection Sort não é adaptativo — ele sempre varre o array inteiro, independentemente de a lista já estar ordenada. Por isso, sua complexidade de tempo é O(n²) nos três cenários: melhor, médio e pior caso. Sua principal vantagem técnica é o número reduzido de trocas: no máximo O(n) swaps, muito menos que o Bubble Sort ou o Insertion Sort. É um algoritmo in-place, com complexidade de espaço O(1).

1const selectionSort = (arr) => {
2    for (let i = 0; i < arr.length - 1; i++) {
3        let minIndex = i;
4        
5        // Varre o restante do array procurando o menor elemento
6        for (let j = i + 1; j < arr.length; j++) {
7            if (arr[j] < arr[minIndex]) {
8                minIndex = j;
9            }
10        }
11        
12        // Se o menor elemento não for o atual, realiza a troca
13        if (minIndex !== i) {
14            [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
15        }
16    }
17    
18    return arr;
19};

Definição do Selection Sort

O Selection Sort (Ordenação por Seleção) divide a lista em duas partes: uma ordenada (à esquerda) e uma não ordenada (à direita). A cada iteração, ele busca o menor elemento da parte não ordenada e o move para o final da parte ordenada. O processo se repete até que toda a lista esteja ordenada.

Como o Selection Sort Funciona

  1. Considere o primeiro elemento da parte não ordenada como o menor valor provisório.
  2. Percorra todos os elementos à direita comparando cada um com o menor valor provisório.
  3. Se encontrar um valor menor, ele passa a ser o novo menor valor provisório.
  4. Ao final da varredura, realize uma única troca (swap): coloque o menor valor encontrado na primeira posição da parte não ordenada.
  5. Avance a barreira da parte ordenada uma posição e repita até o final do array.

Aplicações e Uso Real

Assim como o Bubble Sort, o Selection Sort raramente é usado em produção devido à sua complexidade quadrática. Sua principal vantagem é realizar o número mínimo possível de trocas — no máximo N−1. Isso o torna útil em contextos de hardware limitado, como memórias flash (EEPROM), onde cada operação de escrita consome processamento e desgasta fisicamente o chip.

Propriedades do Selection Sort

  1. Complexidade de tempo: O(n²) em todos os casos — melhor, médio e pior. Por não ser adaptativo, o algoritmo sempre varre a lista inteira a cada rodada, mesmo que ela já esteja ordenada.
  2. Complexidade de espaço: O(1). É um algoritmo in-place: reordena os elementos dentro do próprio array, usando apenas uma variável temporária para a troca.
  3. Estabilidade: Não é estável. A troca de longa distância pode inverter a ordem relativa de dois elementos com valores iguais.

FAQ

01. Qual é a principal diferença entre o Selection Sort e o Insertion Sort?

02. Se ele é sempre O(n²), por que aprender esse algoritmo?

03. Por que o Selection Sort clássico não é estável?

04. O Selection Sort precisa de memória extra?

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