Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Como funciona o mergeSort()?

Olá!

Estou com uma dúvida no funcionamento da função 'mergeSort()', mas na parte em que ela retorna as duas listas já ordenadas. Consegui entender como é feito o processo de divisão das lista inicial, até que se reduza a vários arrays de um só elemento e que depois vão se juntando para formar a 'parte1' e 'parte2', que depois serão usadas para fazer a ordenação na função 'ordena()'.

A minha dúvida está justamente após ser feita a divisão do array. Queria saber como é feito esse processo em que ele se monta novamente formando duas listas já ordenadas. Será que alguém poderia me ajudar com isso, por favor?

Desde já, agradeço muito pela ajuda!

4 respostas
solução!

Oi Iury, tudo bem?

Após a divisão do array em partes menores, a função mergeSort é chamada novamente recursivamente para ordenar cada uma das partes. Quando a recursão termina e as partes já estão ordenadas, a função ordena é chamada para juntar as partes ordenadas.

Dentro da função ordena, é utilizado um loop while para comparar os elementos das partes e ordená-los. O loop continua enquanto ainda houver elementos nas partes. A cada iteração do loop, é comparado o elemento atual de cada parte e o menor elemento é adicionado ao array resultado utilizando o método push.

Após o loop, é verificado se ainda há elementos restantes em alguma das partes. Se houver, esses elementos são concatenados ao array resultado utilizando o método concat.

Dessa forma, as duas partes são juntadas novamente em um único array ordenado, que é retornado pela função mergeSort.

Espero ter esclarecido sua dúvida!

Se tiver mais alguma pergunta, é só compartilhar no fórum.

Abraços e bons estudos!

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

Olá, Monalisa! Muito obrigado pela resposta!

Mas me surgiu uma nova dúvida agora. Como que as partes menores da função mergeSort() são ordenadas, antes de partir pra função ordena()?

Abraços e muito obrigado novamente!

Oi Iury

As partes menores da função mergeSort() são ordenadas através de chamadas recursivas da própria função mergeSort().

Após a divisão do array em partes menores, a função mergeSort() é chamada novamente para ordenar cada uma dessas partes. Isso é feito de forma recursiva, ou seja, a função se chama novamente até que o array seja o menor possível (com apenas um elemento).

Assim, a função mergeSort() é responsável por dividir o array em partes menores e chamar a si mesma para ordenar cada uma dessas partes. Esse processo de divisão e chamadas recursivas garante que todas as partes menores sejam ordenadas antes de serem passadas para a função ordena().

Espero ter esclarecido a dúvida.

Caso tenha mais alguma outra dúvida, é só compartilhar no fórum.

Grande abraço!

Perfeito então, Monalisa, muitíssimo obrigado pela ajuda!!