3
respostas

Como corrigir?

A minha lista não esta trazendo os valores ordenados!

Ex: // Solicitei a classe Livros

const listas = require ('./Livros')

function mergeSorte (array) { // Criar uma cosntante para achar a metade do array. Match floor = para aredondar o numero if(array.lenght > 1){ const meio = Math.floor(array.lenght/2) // Slice = para cortar o array no meio const parte1 = mergeSorte (array.slice(0,meio)); const parte2 = mergeSorte (array.slice(meio,array.lenght)); array = ordena(parte1,parte2); } return array; }

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

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

    if(produtoAtualParte1.valor < produtoAtualParte2.valor){
        // push = vai sempre mandar pro final o elemento que estamos trabalhando      
        resultado.push(produtoAtualParte1)
        posicaoAtualParte1 ++
    }else{
        resultado.push(produtoAtualParte2)
        posicaoAtualParte2 ++ 
    }
}
return resultado.concat(posicaoAtualParte1 < parte1.lenght 
    ? parte1.slice(posicaoAtualParte1)
    : parte2.slice(posicaoAtualParte2) )

}

console.log(mergeSorte(listas));

3 respostas

Bom dia Rafa, blz ? Este é um erro comum, a palavra length está escrita de forma errada no seu código, está lenght e o correto é length. Abraços.

A minha lista também não está trazendo os valores ordenados.

Já procurei se há algo escrito errado mas não encontrei.

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

function mergeSort(array) {

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

    return array;
}

function ordena(parte1, parte2) {
    let posicaoAtualParte1 = 0
    let posicaoAtualParte2 = 0
    const resultado = []

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

        if (produtoAtualParte1.preco < produtoAtualParte2.preco) {
            resultado.push(produtoAtualParte1)
            posicaoAtualParte1++
        } else {
            resultado.push(produtoAtualParte2)
            posicaoAtualParte2++
        }
    }

    return resultado.concat(posicaoAtualParte1 < parte1.lenght
        ? parte1.slice(posicaoAtualParte1)
        : parte2.slice(posicaoAtualParte2))

}


console.log (mergeSort(listaLivros));

No terminal aparece a lista de livros tal qual ela é descrita no arquivo com a lista: { 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 }

Pelo que eu entendi, nem a função mergeSort nem a função ordena estão sendo executadas.

Bom dia Driene, também está escrito lenght onde o correto seria length.