Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

MergeSort Recursividade,

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))
2 respostas
solução!

O undefined que você está recebendo é pq, no fim da sua função mergeSort, você não está retornando o valor de arrayOrganizado. Aí a linha com: array = ordena(primeiraParte, segundaParte); está colocando o valor undefined na variável array. Para resolver, após o concat do arrayOrganizado, você deve adicionar um: return arrayOrganizado;

Contudo, isso ainda não fará seu código fazer o que você está buscando, boa sorte na conclusão do problema :)

Sim era isso mesmo, brigadão TMJ! Deixei passar batido esse detalhe.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software