4
respostas

[Dúvida] não esta ordenando

const listaLivros = require('./array');

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 posicaoAtualParte1 = 0 let posicaoAtualParte2 = 0 constresultado = []

while (posicaoAtualParte1 < parte1.length && posicaoAtualParte2 < parte2.length){
    let produtoAtualParte1 = parte1[posicaoAtualParte1];
    let produtoAtualParte2 = parte2[posicaoAtualParte2];

    if (produtoAtualParte1.preco < produtoAtualParte2.preco){
        resultado.push(posicaoAtualParte1)
        posicaoAtualParte1++
    }else{
        resultado.push(produtoAtualParte2)
        posicaoAtualParte2++
    }
}
return resultado.concat(posicaoAtualParte1 < parte1.length 
    ? parte1.slice(posicaoAtualParte1)
    : parte2.slice(posicaoAtualParte2))
    

}

console.log(mergeSort(listaLivros));

4 respostas

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}

Boa tarde, tente usar a correção a seguir e vê se funciona.

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); // Aqui deve ser o produto, não a posição
        posicaoAtualParte1++;
    } else {
        resultado.push(produtoAtualParte2); // Aqui deve ser o produto, não a posição
        posicaoAtualParte2++;
    }
}

// Adiciona os elementos restantes das partes ao resultado
while (posicaoAtualParte1 < parte1.length) {
    resultado.push(parte1[posicaoAtualParte1]);
    posicaoAtualParte1++;
}

while (posicaoAtualParte2 < parte2.length) {
    resultado.push(parte2[posicaoAtualParte2]);
    posicaoAtualParte2++;
}

return resultado;

}

const listaLivros = require('./array');

function mergeSort(array, nivelAninhamento = 0) {

console.log(`nível de aninhamento: ${nivelAninhamento}`);
console.log(array);

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

}
return array;

}

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(posicaoAtualParte1)
        posicaoAtualParte1++
    }else{
        resultado.push(produtoAtualParte2)
        posicaoAtualParte2++
    }
}
return resultado.concat(posicaoAtualParte1 < parte1.length 
    ? parte1.slice(posicaoAtualParte1)
    : parte2.slice(posicaoAtualParte2))
}

infelizmente não funcionou