|
| 1 | +package unit05.Actividad22_Aplicacion; |
| 2 | + |
| 3 | +import java.util.Arrays; |
| 4 | + |
| 5 | +/* |
| 6 | + La fusión de dos tablas ordenadas consiste en copiar todos sus elementos (de ambas tablas) en una tercera que deberá seguir ordenada. |
| 7 | + Podemos realizar una fusión «ineficiente» copiando los elementos de ambas tablas (sin tener en cuenta el orden) en la tabla final y ordenar esta. |
| 8 | + Existe una manera óptima de realizar la fusión en la que se elige en cada momento el primer elemento no copiado de alguna de las tablas y |
| 9 | + se añade a la tabla final, que seguirá ordenada sin necesidad de ordenación alguna. |
| 10 | +Busca información sobre el algoritmo de fusión e impleméntalo en Java. |
| 11 | + */ |
| 12 | +public class Actividad22 { |
| 13 | + public static void main(String[] args) { |
| 14 | + int[] tabla1 = {1, 3, 5, 7, 9}; |
| 15 | + int[] tabla2 = {2, 4, 6, 8, 10, 5}; |
| 16 | + |
| 17 | + int[] tabla3 = mergeTabla(tabla1, tabla2); |
| 18 | + System.out.println("Tabla 1: " + Arrays.toString(tabla1)); |
| 19 | + System.out.println("Tabla 2: " + Arrays.toString(tabla2)); |
| 20 | + System.out.println("Tabla 3: " + Arrays.toString(tabla3)); |
| 21 | + } |
| 22 | + |
| 23 | + private static int[] mergeTabla(int[] tabla1, int[] tabla2) { |
| 24 | + int[] tabla3 = tabla1; // Copiamos la tabla1 en la tabla3 |
| 25 | + |
| 26 | + for (int j : tabla2) { // Recorremos la tabla2 |
| 27 | + int index = Arrays.binarySearch(tabla3, j); // Buscamos el elemento de la tabla2 en la tabla3 |
| 28 | + if (index < 0) { // Si no lo encuentra, devuelve un número negativo |
| 29 | + index = -index - 1; // Obtenemos el índice donde debería estar el elemento |
| 30 | + } |
| 31 | + // Copiamos la tabla3 en la tabla3, desde el índice hasta el final, en la tabla3, desde el índice + 1 hasta el final |
| 32 | + tabla3 = Arrays.copyOf(tabla3, tabla3.length + 1); |
| 33 | + System.arraycopy(tabla3, index, tabla3, index + 1, tabla3.length - index - 1); // Desplazamos los elementos |
| 34 | + tabla3[index] = j; // Insertamos el elemento de la tabla2 en la tabla3 |
| 35 | + } |
| 36 | + return tabla3; |
| 37 | + } |
| 38 | +} |
0 commit comments