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

Dúvida

Boa noite. A função mergeSort, sempre começa a primeira parte da divisão com a menor? no caso, vamos supor que temos um array de 7, ele vai dividir por 2, logo temos: 1 array de 3, e outro que é a segunda parte de 4, certo? Depois ele vai dividir o de 3, que fica a 1 de 1, depois pega o 2 da primeira parte ainda, e divide novamente, acaba a primeira parte do array, e segue para o segundo, pegando 4 e fazendo igual, até aqui, foi mais para ver se estou entendendo, a pergunta é: A função sempre vai começar com a parte menor da divisão? Outra pergunta: se na segunda parte da divisão, existir um valor que deveria estar no começo da lista final, depois disso tudo, a função mergeSort, faz uma ordenação final?

2 respostas
solução!

Olá, Luciano!

Entendi suas perguntas e vou tentar esclarecê-las da melhor forma possível.

  1. Sobre a função mergeSort começar sempre com a parte menor da divisão: Não necessariamente. O mergeSort divide o array ao meio, independentemente do tamanho do array. No caso que você mencionou, um array de 7 elementos, ele de fato seria dividido em um array de 3 e outro de 4. Mas essa divisão não é feita com base em qual parte é menor, e sim com base na metade do array. Então, se o array tivesse 8 elementos, teríamos duas partes iguais de 4 elementos.

  2. Sobre a ordenação final: Sim, a função mergeSort faz uma ordenação final. Depois de dividir o array em partes menores até chegar em arrays de um elemento só, a função começa a juntar essas partes de volta, comparando os elementos e colocando-os em ordem. Isso significa que, mesmo que um valor que deveria estar no começo da lista final esteja na segunda parte da divisão, ele será reposicionado corretamente durante essa etapa de junção e ordenação.

Por exemplo, se tivermos o array [5, 3, 8, 4], ele seria primeiro dividido em [5, 3] e [8, 4]. Depois, cada uma dessas partes seria dividida novamente até termos arrays de um elemento só. Na hora de juntar tudo de volta, a função compararia os elementos e os colocaria em ordem, resultando no array [3, 4, 5, 8].

Espero ter ajudado e bons estudos!

maravila, obrigado.