Passos:
Execute o algoritmo para ver os passos gravados.
Passos:
Execute o algoritmo para ver os passos gravados.
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};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.
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.