Duvida sobre união de Arrays

Foi proposto o seguinte exercicio:

Dados dois conjuntos a e b, ordenados em ordem crescente, sendo que a tem n elementos e b tem m elementos,
faça um método que gere outro array c, da união de a e b, com seus valores alocados em ordem crescente. Exemplo:
a = { 4 8 15 27 36 57 } b = { 1 5 22 56 65 77 93 }
c = { 1 4 5 8 15 22 27 36 56 57 65 77 93 }
Observação: não use a técnica de juntar os dois arrays em um só e depois ordenar este array obtido.

só que eu n faço ideia de como fazer fora essa tecnica que é falado para não usar ¬¬

Mateus Mello

É bem simples, se você pensar bem. É uma técnica conhecida como "merge" (juntar) e é muito usada quando se quer ordenar coisas que não caibam na memória física de um computador. Basta pensar nos arrays como sendo duas listas; você sempre pega o primeiro elemento de cada uma das listas e compara um com o outro. Se o primeiro elemento de a for menor que o primeiro elemento de b, então você pega o primeiro elemento de a e o põe na lista c (sem mexer na lista b). Se for maior, então você pega o primeiro elemento de b (sem mexer na lista a). E se forem iguais, então você pega o primeiro elemento de cada uma delas; como é a união, então não pode haver repetição, e você põe apenas uma cópia desse primeiro elemento na lista c.

Por exemplo:
i = 0, j = 0, k = 0
a = { 4 8 15 27 36 57 } b = { 1 5 22 56 65 77 93 }
a[i] = 4, b[j] = 1 -> ganhou b[j], então c[k] = b[j], j++, k++
a[i] = 4, b[j] = 5 -> ganhou a[i], então c[k] = a[i], i++, k++

e assim por diante, até acabar um dos arrays. Ai você copia os elementos restantes no array c.

e ae mateuspmello blz?

Eu pensei numa maneira bem melhor e muito menos trabalhosa. E também podemos partir do princípio de não reinventarmos a roda, né?!

Se já existe alguma coisa pronta, pra que não usá-la??

vc usa 2 métodos. Na classe System tem o método arraycopy que vc usa pra copiar os 2 arrays para um outro novo array. Mas como vc sabe os arrays não se pode aumentar ou diminuir seu tamanho, então o novo array vc precisa cria-lo com o tamanho dos 2 arrays que vc quer copiar.

Aí pra ordenar vc usa o método sort da classe Arrays. fiz um exemplo aí pra vc dar uma olhada, blz? espero que ajude.

Integer i = {2, 4, 6};
Integer j = {1, 3, 5};
//cria o novo array com o tamanho dos 2
Integer k = new Integer[i.length + j.length];

// Objeto a ser copiado, posição inicial desse objeto, Objeto de destino, posição inicial do Objeto de destino, tamanho do Objeto a ser copiado.
System.arraycopy(i, 0, k, 0, i.length);

// Objeto a ser copiado, posição inicial desse objeto, Objeto de destino, posição inicial do Objeto de destino, tamanho do Objeto a ser copiado.
System.arraycopy(j, 0, k, i.length, j.length);

Arrays.sort(k);

acho que é isso.

flws []s

Pablo, no enunciado do exercício pede-se explicitamente para não fazer o que você recomendou (ou seja, concatenar os arrays e ordenar). Além disso, ele pediu a união (ou seja, tirar os elementos repetidos).

Ixi matheus, sinto muito. Não tinha lido a observação e fiz exatamente o que não era pra fazer hehe. Foi mal.

[]s

iuheiueh tranquilo pablodiego… tinha pensado parecido contigo haha

thingol valeuu!! implementei pelo seu metodo e deu tudo certo

Obrigado

Mateus Mello

É isso aí, seu Mateus. Eu não gosto de dar a resposta pronta porque a pessoa não só não aprende como também não consegue se explicar :stuck_out_tongue: