Olá, Kelvin! Tudo certo?
Peço desculpas pela demora no retorno.
A lógica do seu código está correta, porém na definição da função mergeSort()
faltou o sinal de }
indicando o fim da função após o return array
O código após essa correção ficará assim:
const listaLivros = require("./array");
function mergeSort(array) {
if (array.length > 1) {
const meio = Math.floor(array.length / 2);
const parte1 = mergeSort(array.slice(0, meio));
const parte2 = mergeSort(array.slice(meio, array.length));
array = ordena(parte1, parte2);
}
return array;
}
function ordena(parte1, parte2) {
let posicaoAtualParte1 = 0;
let posicaoAtualParte2 = 0;
const resultado = [];
while (
posicaoAtualParte1 < parte1.length &&
posicaoAtualParte2 < parte2.length
) {
let produtoAtualParte1 = parte1[posicaoAtualParte1];
let produtoAtualParte2 = parte2[posicaoAtualParte2];
if (produtoAtualParte1.preco < produtoAtualParte2.preco) {
resultado.push(produtoAtualParte1);
posicaoAtualParte1++;
} else {
resultado.push(produtoAtualParte2);
posicaoAtualParte2++;
}
}
return resultado.concat(
posicaoAtualParte1 < parte1.length
? parte1.slice(posicaoAtualParte1)
: parte2.slice(posicaoAtualParte2)
);
}
console.log(mergeSort(listaLivros));
Caso tenha ficado com alguma dúvida, não deixe de compartilhar!
Continue praticando e evoluindo na sua jornada.
Bons estudos e até mais!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!