-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquick-sort.js
More file actions
23 lines (17 loc) · 1.88 KB
/
Copy pathquick-sort.js
File metadata and controls
23 lines (17 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function quickSort(array) { // Recebe o array não ordenado como argumento
if (array.length <= 1) { // Caso base, retorna o array se não houver nenhum ou apenas um elemento, pois por definição, uma lista vazia ou com apenas um elemento já está ordenada
return array;
}
let pivot = array[0]; // Definimos o pivô, que será o valor que iremos comparar todos os outros, estará entre os valores da esquerda (menores) e os da direita (maiores).
let left = []; // Define a partição da esquerda (valores menores)
let right = []; // Define a partição da direita (valores maiores)
for (let i = 1; i < array.length; i++) { // Itera pra cada elemento do array, verificando se o valor atual é menor ou maior que o pivô, Se for menor, adiciona a partição esquerda, se for maior adiciona a partição direita
array[i] < pivot ? left.push(array[i]) : right.push(array[i]);
}
// No final de cada execução de quickSort, teremos duas partições de array e o pivô
// Iremos ir particionando este array a cada execução até que sobre apenas 1 elemento dentro do array, e ir juntando novamente de forma ordenada
// Primeiro enviamos como parâmetro o array da esquerda, iremos pegar o pivô dele e comparar novamente, os valores menores indo para a esquerda e os valores maiores a direita, e novamente chamando até que reste apenas um array com 1 elemento
// Ao retornar este valor iremos concatecar com o valor do pivô, que vem depois do array da esquerda e chama recursivamente a função para lidar com os array da partição direita, e ir gerando partições esquerda e direita até retornar o caso base. No final concatenamos os valores e retornamos o array ordenadoi
return quickSort(left).concat(pivot, quickSort(right)); // Retorna os valores chamando recursivamente a mesma função.
}
console.log(quickSort([17, 14, 23, 2, 4, 9, 15, 1, 0, 3, 5]))