2
respostas

[Dúvida] duvida

não entedi a logica utilizada aqui:

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
}

qual seria o valor de parte 1 e parte 2? me perdi nesses valores, de começo seria parte1 = do 0 ao 25 parte2 = do 25 ao 50 e ai vai diminuindo? queria saber como faço para ver esses valores mudando, para entender a logica

2 respostas

O algoritmo que você está analisando é uma implementação do algoritmo de ordenação Merge Sort em JavaScript. Vamos entender como funciona.

A função mergeSort recebe um array como entrada e divide esse array ao meio recursivamente até que cada subarray tenha apenas um elemento. Em seguida, combina esses subarrays ordenando-os.

Quanto aos valores de parte1 e parte2, eles são subarrays do array original. No caso do código que você forneceu, a divisão ocorre no meio do array original:

  • parte1: É a metade esquerda do array original, indo do índice 0 até o índice do meio (exclusive).
  • parte2: É a metade direita do array original, indo do índice do meio até o final do array.

Aqui está uma representação do que acontece em cada chamada recursiva:

  1. Na primeira chamada recursiva:

    • parte1: array[0] até array[meio - 1]
    • parte2: array[meio] até array[fim]
  2. Na segunda chamada recursiva (para parte1):

    • parte1: array[0] até array[meio//2 - 1]
    • parte2: array[meio//2] até array[meio - 1]

    Na segunda chamada recursiva (para parte2):

    • parte1: array[meio] até array[meio + (fim - meio)//2 - 1]
    • parte2: array[meio + (fim - meio)//2] até array[fim]

E assim por diante, até que a recursão atinja subarrays de tamanho 1.

Se você quiser ver como os valores mudam em cada chamada recursiva, pode adicionar alguns console.log() ao código para imprimir os valores de parte1 e parte2. Por exemplo:

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));
    console.log('parte1:', parte1, 'parte2:', parte2);
    array = ordena(parte1, parte2);
  }
  return array;
}

// Restante do código...

// Exemplo de uso:
const arrayOriginal = [4, 2, 7, 1, 9, 5, 3, 8];
const resultado = mergeSort(arrayOriginal);
console.log('Resultado final:', resultado);

Isso ajudará a visualizar como os subarrays estão sendo divididos e combinados em cada chamada recursiva.

Caso tenha conseguido esclarecer suas dúvidas, fico feliz em ter ajudado. Estou à disposição para qualquer outra questão que possa surgir. Um abraço! Se este post foi útil, por favor, marque como solucionado ✓. Desejo a você excelentes estudos!