Dadas dos matrices ordenadas A y B, donde el final de A tiene suficiente espacio para B, escriba un método para fusionar B en A y ordenarlas.
Después de responder esta pregunta, la idea más directa es comparar los elementos en A y B e insertarlos en las matrices en orden hasta que se atraviesen todos los elementos en A y B. Pero hay una desventaja al hacer esto: si la posición de inserción del elemento está al frente de la matriz A, la matriz original debe moverse hacia atrás. Esto añade gastos generales. Pero podemos usar otro método para insertar elementos al final de la matriz A. ¡De esta manera no tendremos elementos que se muevan! El código es el siguiente:
Copie el código de código de la siguiente manera: /*
* lastA: el número real de elementos en lastB: el número real de elementos en b mergeIndex es el tamaño real del espacio de la nueva matriz
*/
orden de fusión pública estática vacía (int [] a, int [] b, int última A, int última B) {
int índiceA = últimoA - 1;
int índiceB = últimoB - 1;
int mergeIndex = últimoA + últimoB - 1;
mientras (índiceA >= 0 && índiceB >= 0) {
if (a[índiceA] > b[índiceB]) {
a[mergeIndex] = a[indexA];
fusionarIndex --;
índiceA --;
} demás {
a[mergeIndex] = b[índiceB];
fusionarIndex --;
índiceB --;
}
}
mientras (índiceB >= 0) {
a[mergeIndex] = b[índiceB];
fusionarIndex --;
índiceB --;
}
}