Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Resultado incompleto

Olá, meu código não está retornando a lista completa de 6 elementos, apenas 4 elementos são retornados ordenados, Se eu adiciono mais um elemento na lista, ficando com 7, continua com o mesmo problema, mas se adiciono 2, ficando com 8, os 8 são ordenados.

const listaLivros = require('./array_MergeSort')


function mergeSort(array) {
  //desmontando o array em menores
  if (array.length > 1) {
    const meio = Math.floor(array.length / 2)
    //metodo para fatiar o array, a função fica se chamando para continuar fatiando arrays até todo o array ficar fatiado em pequenas partes
    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 posicaoAtual1 = 0
  let posicaoAtual2 = 0
  const resultado = []

  while (posicaoAtual1 < parte1.length && posicaoAtual2 < parte1.length) {
    let produtoAtual1 = parte1[posicaoAtual1]
    let produtoAtual2 = parte2[posicaoAtual2]
    if (produtoAtual1.valor < produtoAtual2.valor) {
      resultado.push(produtoAtual1)
      posicaoAtual1++
    } else {
      resultado.push(produtoAtual2)
      posicaoAtual2++
    }
  }
  return resultado.concat(
    posicaoAtual1 < parte1.length
      ? parte1.slice(posicaoAtual1)
      : parte2.slice(posicaoAtual2)
  )
}

console.log(mergeSort(listaLivros))
1 resposta
solução!

Acho que o seu while está errado:

Errado: while (posicaoAtual1 < parte1.length && posicaoAtual2 < parte1.length)

Certo: while (posicaoAtual1 < parte1.length && posicaoAtual2 < parte2.length)