Programming
T04-1D-A06. Comprobar orden de un array
Enunciado
Escribe un programa en Java que compruebe el orden de un array de números enteros e indique si el array tiene un orden ASCENDENTE, DESCENDENTE, o si no tiene ningún orden.
Ejemplo:
- Dado el array de enteros {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, dirá que es un array con orden ASCENDENTE.
- Dado el array de enteros {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}, dirá que es un array con orden DESCENDENTE.
- Dado el array de enteros {10, 9, 8, 2, 6, 5, 4, 3, 2, 1}, dirá que es un array SIN ORDEN.
ENTRADA
La entrada comienza con un número indicando cuántos casos de prueba habrá que procesar.
Cada uno de los casos estará formado por:
- Una primera línea con el número L de elementos del array, donde L > 0
- Una segunda con los L elementos de dicho array separados por un espacio.
SALIDA
Por cada caso de prueba, el programa escribirá ASCENDENTE, DESCENDENTE o SIN ORDEN, según el orden que tenga el array analizado.
En aquellos casos especiales en los que todos los elementos del array son iguales, la respuesta que daremos será que el array no tiene orden.
RESTRICCIONES
Se resolverá el problema haciendo uso de la siguiente descomposición funcional:
- Una función que reciba un array de enteros y devuelva un booleano diciendo si el orden del array es ascendente o no.
- Una función que reciba un array de enteros y devuelva un booleano diciendo si el orden del array es descendente o no
El programa principal, para cada caso, imprimirá el tipo de orden del array: ASCENDENTE, DESCENDENTE o SIN ORDEN.
OPTIMIZACIÓN ALGORÍTMICA
JuezLTI no lo va a tener en cuenta a la hora de dar como correcto o no el ejercicio, pero vamos a intentar programar de la manera más óptima posible, reduciendo al máximo el tiempo de ejecución.
Debes programar tus funciones teniendo en cuenta que en cuanto encuentres un elemento que no esté en orden en el array, no hace falta seguir recorriéndolo hasta el final para saber que no está ordenado.
Solución
import java.util.Scanner;
/**
*
* @author AulaVirtual
*/
public class ComprobarOrden {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
boolean ascendente, descendente;
int numCasos = 0;
int arraySize;
int[] array;
numCasos = sc.nextInt();
for (int i = 1; i <= numCasos; i++) {
arraySize = sc.nextInt();
array = new int[arraySize];
for (int j = 0; j < array.length; j++) {
array[j] = sc.nextInt();
}
ascendente = estaOrdenadoAscendente(array);
descendente = estaOrdenadoDescendente(array);
if (ascendente && descendente) {
System.out.println("SIN ORDEN");
} else if (ascendente) {
System.out.println("ASCENDENTE");
} else if (descendente){
System.out.println("DESCENDENTE");
} else {
System.out.println("SIN ORDEN");
}
}
}
public static boolean estaOrdenadoAscendente(int[] array) {
boolean ordenadoAscendente = true;
int i = 0;
while (i < array.length - 1 && ordenadoAscendente == true) {
if (array[i] > array[i + 1]) {
ordenadoAscendente = false;
}
i++;
}
return ordenadoAscendente;
}
public static boolean estaOrdenadoDescendente(int[] array) {
boolean ordenadoDescendente = true;
int i = 0;
while (i < array.length - 1 && ordenadoDescendente == true) {
if (array[i] < array[i + 1]) {
ordenadoDescendente = false;
}
i++;
}
return ordenadoDescendente;
}
}
Input
11 10 1 2 3 4 5 6 7 8 9 10 10 10 9 8 7 6 5 4 3 2 1 10 1 2 3 4 5 6 7 8 9 0 10 10 9 8 7 6 5 4 3 2 3 10 1 2 3 3 3 4 5 6 7 8 10 8 7 6 6 4 4 3 3 2 1 10 10 1 2 3 4 5 6 7 8 9 10 1 10 9 8 7 6 5 4 3 2 1 3 5 2 2 2 2 2 6 4 5 6 6 6 6
11 10 1 2 3 4 5 6 7 8 9 10 10 10 9 8 7 6 5 4 3 2 1 10 1 2 3 4 5 6 7 8 9 0 10 10 9 8 7 6 5 4 3 2 3 10 1 2 3 3 3 4 5 6 7 8 10 8 7 6 6 4 4 3 3 2 1 10 10 1 2 3 4 5 6 7 8 9 10 1 10 9 8 7 6 5 4 3 2 1 3 5 2 2 2 2 2 6 4 5 6 6 6 6
Output
ASCENDENTE DESCENDENTE SIN ORDEN SIN ORDEN ASCENDENTE DESCENDENTE SIN ORDEN SIN ORDEN SIN ORDEN SIN ORDEN ASCENDENTE
ASCENDENTE DESCENDENTE SIN ORDEN SIN ORDEN ASCENDENTE DESCENDENTE SIN ORDEN SIN ORDEN SIN ORDEN SIN ORDEN ASCENDENTE

