Java - Como puedo hacer la verificación?

 
Vista:
sin imagen de perfil
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Marcus (25 intervenciones) el 12/03/2020 00:33:54
Buenas, eh estado haciendo un programa el cual ordena una gran cantidad de nombres y apellidos alfabéticamente, lo siguiente que quisiera hacer es como puedo hacer un método para que verifique que está todo ordenado o no(sé que está ordenado pero quisiera saber como hacer esa verificación) necesito ayuda con esto
Les adjunto mi proyecto en un archivo zip.

Gracias de antemano
Un saludo
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Rodrigo (623 intervenciones) el 12/03/2020 04:43:34
Que evita que recorras el conjunto completo y verifiques que cada pareja de elementos contiguos sigue el orden que esperas?
Ordenar es O(n*log(n)) si lo haces rapido y verificar lo puedes hacer en O(n).
Siempre te va a costar mas ordenar que verificar.
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
sin imagen de perfil
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Marcus (25 intervenciones) el 12/03/2020 12:15:40
Eh estado viendo eso de O(n) pero como se aplica?
Es primera vez que veo algoritmos así con recursividad y me está costando un poco entenderle
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
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Rodrigo (623 intervenciones) el 12/03/2020 14:33:48
Si tienes n elementos solo requieres leerlos 1 vez para mostrarlos, en total n operaciones -> O(n)
No necesitas recursividad para esto, desconozco por que' la mencionas.
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Kabuto (1381 intervenciones) el 13/03/2020 10:42:48
Lo que Rodrigo explica que te basta con hacer un solo recorrido del array y comprobar que los elementos contiguos están en el orden deseado.

Puedes hacer un método que devuelva un boolean (true o false)

El método usaría un bucle que por ejemplo fuera desde el primer elemento hasta el penúltimo.
Y compararía cada elemento con su siguiente, para ver si están en el orden adecuado.
Si los elementos están en el orden adecuado, pues no se hace nada y el bucle continúa hasta el siguiente elemento.

Si se encuentran dos elementos que no están en el orden adecuado, automáticamente se puede retornar false y dar por terminado el bucle y el método.

Si el bucle consigue completar el recorrido sin que haya sido necesario retornar false, es que todo está correcto, y podemos retornar true.

Algo parecido a esto. La condición del if que he puesto para comprobar el orden es orientativa, eso ya depende de como funcione tu algoritmo para ordenar

1
2
3
4
5
6
7
8
9
10
11
public boolean compruebaOrden(String[] nombres) {
 
    for (int i = 0; i < nombres.length - 1; i++) {
 
        if (nombres[i] > nombres[i + 1])
            return false; //Se han encontrado dos elementos no ordenados.
    }
 
    return true; //Todos los elementos parecen estar bien ordenados
 
}
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: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Rodrigo (623 intervenciones) el 13/03/2020 14:13:49
Para el caso especifico de comparacion con strings, esto se hace con compareTo(), no con >, >=, <, <=
La comparacion por igualdad se hace con equals().
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Kabuto (1381 intervenciones) el 13/03/2020 23:44:07
¡¡Cierto.!!

Si se trata de Strings u objetos de cualquier otra clase, lo correcto sería usar los métodos compareTo() y equals()

Los signos de comparación e igualdad serían para datos primitivos como int, double, byte,...
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
sin imagen de perfil
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Pedro (25 intervenciones) el 14/03/2020 04:25:14
Quedaría así con el compareto() no?

1
2
3
4
5
6
7
8
private static boolean Verificar(String[] lista) {
    for (int i = 0; i < sorted.length - 1; i++) {
        if (lista[i].compareTo(lista[i + 1]) > 0) {
            return false;
        }
    }
    return true;
}
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
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Rodrigo (623 intervenciones) el 14/03/2020 07:00:13
Cambia, en la linea 2, sorted por lista.
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

Como puedo hacer la verificación?

Publicado por Costero (148 intervenciones) el 14/03/2020 16:48:45
Yo uso Arrays.sort(...) y Arrays.equals(...) para comparar. Por cierto el algorithmo que usan en Arrays.sort la mayoria de me pruebas sortea mas rapido que el Quicksort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String valueToSort = crearNombres();
 
        String [] unsorted1 = valueToSort.split(",");
        QuickSortName quickSortName = new QuickSortName();
        long startTime = System.currentTimeMillis();
        quickSortName.sort(unsorted1);
        System.out.println(System.currentTimeMillis() - startTime);
 
        String [] unsorted2 = valueToSort.split(",");
        startTime = System.currentTimeMillis();
        Arrays.sort(unsorted2, myComparator);
        System.out.println(System.currentTimeMillis() - startTime);
 
        System.out.println("They are equal: " + Arrays.equals(unsorted1, unsorted2));
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
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Rodrigo (623 intervenciones) el 14/03/2020 17:25:24
Es cierto.

Arrays.sort implementa un algoritmo hibrido que considera varios casos en que Quicksort con 1 pivote tiene mal comportamiento, como cuando hay pocos datos, o cuando los datos estan parcialmente ordenados. implementa internamente MergeSort y Quicksort con 2 pivotes, mientras que el Quicksort original usa solo 1 pivote y podria degradarse a O(n^2) en el peor de los casos.
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
sin imagen de perfil
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Pedro (25 intervenciones) el 16/03/2020 17:40:03
Tengo una duda, lo intenté con ese método en mi proyecto pero siempre me devuelve false, intenté con Strings simples (en mi proyecto son "compuestos" por así decirlos porque une aleatoriamente dos strings[] diferentes) y si fucionaba pero en mi proyecto con Strings[] compuestos siempre me sale retorna false
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

Como puedo hacer la verificación?

Publicado por Costero (148 intervenciones) el 16/03/2020 19:41:28
Le estas pasando el comparator?, si no entonces te podria dar false.

1
2
3
4
5
6
private static Comparator<String> myComparator = new Comparator<String>() {
    @Override
    public int compare(String e1, String e2) {
        return e1.compareToIgnoreCase(e2);
    }
};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo hacer la verificación?

Publicado por Pedro (25 intervenciones) el 16/03/2020 20:22:49
Si, gracias ya pude solucionarlo
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