2
respostas

me retorna apenas 3 elementos

no console me retorna apenas [ { titulo: 'PHP', preco: 15 }, { titulo: 'C++', preco: 35 }, { titulo: 'Go', preco: 45 } ]

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

function mergesort(array){

    if(array.length > 1){
        const meio = Math.floor(array.length / 2);
        const part1 = mergesort(array.slice(0,meio));
        const part2 =mergesort (array.slice(meio, array.length));
        array = ordena(part1,part2)
    };
    return array;
};

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

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

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

        return resultado.concat(posicaoAtualP1 < part1.length ? part1.slice(posicaoAtualP1)
        : part2.slice(posicaoAtualP2));
    };
};

console.log(mergesort(listaLivros));
2 respostas

Sabrina,

Consegui emular o seu código, mas NÃO achei a diferença no código, mas os resultados são diferentes! Caramba!

node index2

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));

node index

Desculpe...

[]'s,

Fabio I.

Sabrina,

Descobri!

O trecho RETURN do seu código está DENTRO da rotina WHILE, o certo é estar fora!

index2.js comparado ao index3.js

Quando eu comparava os códigos, pelo fato dos nomes das variáveis e da função serem diferentes, o comparador do Visual Studio Code marcava o texto em vários pontos... eu criei um arquivo "index3.js" copiei o seu código para dentro dele e substitui o nome das variáveis para o nome da variáveis originais do curso. Abaixo o código que descobri a posição errada do RETURN.

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

function mergesort(array) {
  if (array.length > 1) {
    const meio = Math.floor(array.length / 2);
    const part1 = mergesort(array.slice(0, meio));
    const part2 = mergesort(array.slice(meio, array.length));
    array = ordena(part1, part2);
  }

  return array;
}

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

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

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

  return resultado.concat(
    posicaoAtualP1 < part1.length
      ? part1.slice(posicaoAtualP1)
      : part2.slice(posicaoAtualP2)
  );
}

console.log(mergesort(listaLivros));

Espero ter ajudado.

[]'s,

Fabio I.