Dadas duas matrizes ordenadas A e B, onde o final de A tem espaço suficiente para B, escreva um método para mesclar B em A e classificá-los.
Depois de responder essa pergunta, a ideia mais direta é comparar os elementos de A e B e inseri-los nos arrays em ordem até que todos os elementos de A e B sejam percorridos. Mas há uma desvantagem em fazer isso: se a posição de inserção do elemento estiver na frente do array A, o array original deverá ser movido para trás. Isso adiciona sobrecarga. Mas podemos usar outro método para inserir elementos no final do array A. Desta forma não teremos elementos se movendo! O código é o seguinte:
Copie o código do código da seguinte forma: /*
* lastA: o número real de elementos em um lastB: o número real de elementos em b mergeIndex é o tamanho real do espaço do novo array
*/
public static void mergeOrder(int[] a, int[] b, int lastA, int lastB) {
int índiceA = últimoA - 1;
int índiceB = últimoB - 1;
int mergeIndex = últimoA + últimoB - 1;
while (índiceA >= 0 && índiceB >= 0) {
if (a[índiceA] > b[índiceB]) {
a[mergeIndex] = a[indexA];
mesclarIndex --;
índiceA --;
} outro {
a[mergeIndex] = b[indexB];
mesclarIndex --;
índiceB --;
}
}
enquanto (índice B >= 0) {
a[mergeIndex] = b[indexB];
mesclarIndex --;
índiceB --;
}
}