Java - Unir dos listas en Java

 
Vista:
Imágen de perfil de Rafael
Val: 4
Ha aumentado su posición en 16 puestos en Java (en relación al último mes)
Gráfica de Java

Unir dos listas en Java

Publicado por Rafael (3 intervenciones) el 18/07/2019 14:36:10
Saludos a todos.

Podrian por favor ayudarme a solucionar este ejercicio de estructura de datos en Java:

"Realice un método recursivo que dadas dos listas ordenadas ascendentemente, las mezcle generando una nueva lista ordenada descendentemente."

El inconveniente es MEZCLAR las dos listas, pues generarlas no es problema.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.018
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

[Alternativa] Unir dos listas en Java

Publicado por Billy Joel (594 intervenciones) el 18/07/2019 16:45:13
El uso de recursividad para ordenar un arreglo no es lo mío, pero si que logro llegar a la solución del problema planteado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class MezclarArreglos {
 
    public static void ordenamientoDescendente(int[] v) {
        for (int i = v.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (j + 1 <= i && v[j] < v[j + 1]) {
                    int aux = v[j];
                    v[j] = v[j + 1];
                    v[j + 1] = aux;
                }
            }
        }
    }
 
    public static int[] mezclar(int[] a, int[] b) {
        int[] x = new int[a.length + b.length];
        for (int idx = 0; idx < x.length; idx++) {
            if (idx < a.length) {
                x[idx] = a[idx];
            } else {
                x[idx] = b[idx - a.length];
            }
        }
        ordenamientoDescendente(x);
        return x;
    }
 
    public static void main(String[] args) {
        int[] a = {1, 3, 4, 5, 6, 10};
        int[] b = {2, 7, 8, 9, 11, 13};
        int[] x = mezclar(a, b);
        for (int idx = 0; idx < x.length; idx++) {
            System.out.println(idx + ": " + x[idx]);
        }
    }
}

Lo primero es juntar mezclar los dos arreglos dentro de uno (x) luego hago un ordenamiento por burbuja descendiente ver la línea 6 (Teniendo en cuenta que los objetos pasan por referencia, no hace falta devolver el arreglo). Al final se muestra el contenido del nuevo arreglo ordenado descendente,

Para ordenar de forma ascendente solo hay que cambiar el signo en la lína 6 de menor que a mayor que.

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rodrigo
Val: 1.753
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Unir dos listas en Java

Publicado por Rodrigo (472 intervenciones) el 19/07/2019 12:11:19
Los datos ya estan ordenados, por lo que no es necesario invertir tiempo en ordenarlos otra vez.
Que los datos esten en una lista agrega una restriccion: no hay acceso aleatorio, no es posible usar indices como si fuera un arreglo.

Sugiero que uses una funcion recursiva que reciba 3 parametros, las 2 listas y la lista que vas a armar.

En cada invocacion, comparas los 2 elementos iniciales de las listas y tomas el menor, y este lo agregas al inicio de la lista final.
Casos especial: las 2 listas estan vacias. En ese caso retornar lo que construiste.
Al insertar un elemento en la lista final, tomando de alguna de las listas permite llamar recursivamente a la funcion, sin considerar ahora el elemento que agregaste a la lista final.

Intenta hacerlo con esos hints. Si no lo logras, echale un vistazo a: http://bit.ly/reverseMergeSortedLists
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar