Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Imprimindo resultado errado

const listaLivros = require ("./array")

function margeSort(array){

    if (array.length > 1){
        const meio = Math.floor(array.length / 2);
        const parte1 = margeSort(array.slice(0, meio))
        const parte2 = margeSort(array.slice(meio, array.length))

        array = ordena(parte1, parte2)
    }

    return array
}

function ordena(parte1, parte2){
    let posicaoAtualP1 = 0;
    let posicaoAtualP2 = 0;
    const resultado = [];

    while (posicaoAtualP1 < parte1.length && posicaoAtualP2 < parte2.length){
        let produtoAtualP1 = parte1[posicaoAtualP1];
        let produtoAtualP2 = parte2[posicaoAtualP2];

        if (produtoAtualP1.preco < produtoAtualP2.preco){
            resultado.push(produtoAtualP1)
            posicaoAtualP1++

        } else {
            resultado.push(posicaoAtualP2);
            posicaoAtualP2++
        } 
    }
    return resultado.concat(posicaoAtualP1 < parte1.length ? parte1.slice(posicaoAtualP1) : 
    parte2.slice(posicaoAtualP2))
}


console.log(margeSort(listaLivros))

Está retornando:

[ 0, 1, 2, 3, 4, 5, 0, 1, 2, 0, { titulo: 'Go', preco: 45 } ]

Não consegui achar o erro do código

1 resposta
solução!

Olá Vinícios, tudo bem?

Analisando o código que você compartilhou, pude perceber que o erro estava na condição na estrutura de condição presente na função ordena. Mais especificamente, no "else", nele você passou a variável posicaoAtualP2 em vez de produtoAtualP2, fazendo com que a posição seja inserida dentro da lista em vez do produto.

else {
    resultado.push(produtoAtualP2);
    posicaoAtualP2++
} 

Então para solucionar o seu problema, basta alterar esse trecho do seu código como está no exemplo acima.

Espero ter ajudado. Caso tenha mais dúvidas estarei à disposição.

Grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.