1
resposta

Pq ele n ta funcionando?

const edFolha = require("./estudos2");

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 posicaoAtualP1 = 0;
    let posicaoAtualP2 = 0;
    const result = [];

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

        if(produtoAtualP1.preco < produtoAtualP2.preco){
            result.push(produtoAtualP1);
            posicaoAtualP1++;
        } else {
            result.push(produtoAtualP2);
            posicaoAtualP2++;
        }

        return result.concat(posicaoAtualP1 < parte1.lenght 
        ? parte1.slice(posicaoAtualP1) : parte2.slice(posicaoAtualP2))
    }
}

console.log(mergeSort(edFolha));
1 resposta

Olá, como vai?

O problema do seu código está no retorno da função ordena. Primeiro, o seu retorno está dentro do escopo do while então é necessário copiar toda a sua estrutura e colar fora do while, e por fim, na primeira comparação você escreveu a propriedade length errada, você escreveu como lenght.

Abaixo segue a função ordena corrgida:

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

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

        if(produtoAtualP1.preco < produtoAtualP2.preco){
            result.push(produtoAtualP1);
            posicaoAtualP1++;
        } else {
            result.push(produtoAtualP2);
            posicaoAtualP2++;
        }
    }
    return result.concat(posicaoAtualP1 < parte1.length 
      ? parte1.slice(posicaoAtualP1) : parte2.slice(posicaoAtualP2))
}

Espero ter ajudado e caso tenha mais problemas ou dúvidas estarei à disposição!

Grande abraço e bons estudos!

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