1
resposta

boa noite, o length aparece como indefinido para min,como resolver?.

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
        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)
                posicaoAtualParte1++
            }else{
                resultado.push(produtoAtualParte2)
                posicaoAtualParte2++

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

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

Olá, Kelvin! Tudo certo?

Peço desculpas pela demora no retorno.

A lógica do seu código está correta, porém na definição da função mergeSort() faltou o sinal de } indicando o fim da função após o return array

O código após essa correção ficará assim:

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;
  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);
      posicaoAtualParte1++;
    } else {
      resultado.push(produtoAtualParte2);
      posicaoAtualParte2++;
    }
  }

  return resultado.concat(
    posicaoAtualParte1 < parte1.length
      ? parte1.slice(posicaoAtualParte1)
      : parte2.slice(posicaoAtualParte2)
  );
}

console.log(mergeSort(listaLivros));

Caso tenha ficado com alguma dúvida, não deixe de compartilhar!

Continue praticando e evoluindo na sua jornada.

Bons estudos e até mais!

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