Por algum motivo a recursividade após a primeira adicao no arrayOrganizado não consegue continuar as comparacoes, me dando um belo de um undefined na condição de parte2 no while da funcao ordena();
Após uns 4 dias de pesquisa e entendendo sobre o assunto, não foi o suficiente para eu entender a ponto de resolver este bug. Se algum instrutor puder me ajudar eu serei muito grato. kkkkk
Segue o array original com os objetos.
const editora1 = [
{
nome:"Java",
preco: 40
},
{
nome:"Php",
preco: 70
},
{
nome: "Python",
preco: 32
},
{
nome:"JavaScript",
preco: 60
},
{
nome:"Rust",
preco: 53
},
{
nome: "Rubi",
preco: 12
},
{
nome: "Elixir2.0",
preco: 32
}
];
module.exports = editora1
Segue agora o algoritimo do mergeSort
const listaLivros = require("./editoras.js");
//console.log(listaLivros)
function mergeSort(array, nivelInstancia = 0){
console.log("nivel recursivo => " + nivelInstancia)
console.log(array)
if(array.length > 1){
const meio = Math.floor(array.length / 2);
const primeiraParte = mergeSort(array.slice(0, meio), nivelInstancia+1);
const segundaParte = mergeSort(array.slice(meio, array.length), nivelInstancia+1);
console.log("primeira parte => "+primeiraParte);
console.log("segunda parte => "+segundaParte);
array = ordena(primeiraParte, segundaParte);
}
return array
}
function ordena(parte1, parte2){
let arrayOrganizado = [];
let posicaoAtualParte1=0;
let posicaoAtualParte2=0;
//console.log("parte1 => "+parte1)
//console.log("parte2 => "+parte2)
while(posicaoAtualParte1 < parte1.length && posicaoAtualParte2 < parte2.length){
let produtoAtualParte1 = parte1[posicaoAtualParte1];
let produtoAtualParte2 = parte2[posicaoAtualParte2];
if(produtoAtualParte1.preco < produtoAtualParte2.preco){
arrayOrganizado.push(produtoAtualParte1)
posicaoAtualParte1++
console.log("parte1" +parte1)
console.log("Array ordenado => ", arrayOrganizado)
}else{
arrayOrganizado.push(produtoAtualParte2)
posicaoAtualParte2++
console.log("parte2" +parte2)
console.log("Array ordenado => ", arrayOrganizado)
}
}
console.log("sai do while ")
arrayOrganizado.concat(posicaoAtualParte1 < parte1.length
? parte1.slice(posicaoAtualParte1)
: parte2.slice(posicaoAtualParte2));
}
//mergeSort(listaLivros);
console.log(mergeSort(listaLivros))