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