O resultado final deveria ser uma lista de livros ordenada por preço mas estou rebendo o retorno da lista original.
array.js
const listaLivros = [
{
titulo: "Go",
preco: 45
},
{
titulo: "C++",
preco: 35
},
{
titulo: "Java",
preco: 30
},
{
titulo: "PHP",
preco: 15
},
{
titulo: "Elixir",
preco: 50
},
{
titulo: "Rust",
preco: 22
},
{
titulo: "Scala",
preco: 40
},
{
titulo: "Ruby",
preco: 28
},
{
titulo: "JavaScript",
preco: 25
},
{
titulo: "C#",
preco: 33
},
{
titulo: "Python",
preco: 20
},
]
module.exports = listaLivros
index.js
const listaLivros = require('./array');
function mergeSort (listaL) {
if(listaL.length < 1){
const meio = Math.floor(listaL.length / 2);
const parte1 = mergeSort(listaL.slice(0, meio));
const parte2 = mergeSort(listaL.slice(meio, listaL.length));
listaL = ordena(parte1, parte2);
}
return listaL;
}
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));