Ordenar cualquier array con SORT en JAVA

En entradas anteriores ya aprendimos a ordenar un array numérico con la ordenación de burbuja (Bubble sort). En este caso facilitaremos mucho las cosas ya que en la API estándar de JAVA podemos encontrar el método sort de la clase Arrays, que está en el paquete java.util que se encargará de ordenar cualquier tipo de array que le pasemos como argumento.

Su uso se verá mejor con el siguiente ejemplo:
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        //Array de String
        String[] nombres = {"Pepe", "Juan", "Alex",
            "Julian", "Francisco", "Luis"};

        //Ordena el array
        Arrays.sort(nombres);

        //Mostramos el array ya ordenado
        for (String i : nombres) {
            System.out.print(i + ", ");
        }
    }
}
A este método se le puede pasar cualquier array de cualquier tipo, ya probamos un tipo referencia con el tipo String, así que a continuación podrás ver el método sort en acción con un array de tipo primitivo int.
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        //Array de String
        int[] nombres = {4, 2, 6, -3, 10, 11, 166, 1};

        //Ordena el array
        Arrays.sort(nombres);

        //Mostramos el array ya ordenado
        for (int i : nombres) {
            System.out.print(i + ", ");
        }
    }
}

Comentarios

  1. Se entiende perfecto :D

    ResponderEliminar
  2. y como se especifica que sea de mayor a menor o de menor a mayor??

    ResponderEliminar
    Respuestas
    1. Se podría hacer con un segundo parametro al método sort que modifica el orden natural de ordenado.

      Collections.reverseOrder()

      De modo que al metodo sort le pasas como primer parametro el array a ordenar, y como segundo parametro la llamada al metodo descrita anteriormente.

      Saludos.

      Eliminar
  3. Y para ordenar un arreglo definido por ejemplo 100

    ResponderEliminar
  4. muchas gracias amigo :D pero tengo una duda ¿como le hago de mayor a menor ?¿me podrias dar un codigo ? saludos.

    ResponderEliminar
    Respuestas
    1. Eso esta explicado en una de mis respuestas anteriores en este mismo post.

      Saludos.

      Eliminar
  5. Con esto sale por la consola el primer valor, como se hace para que salgan el resto de valores?

    ResponderEliminar
  6. Es posible ordenar un array de objetos de una clase (definidos con un atributo fecha de tipo Calendar) mediante algun metodo ya programado de las apis de Java? Agradeceria mucho su ayuda

    ResponderEliminar
    Respuestas
    1. Se podría hacer también con el método sort, para ello tu clase que contiene el objeto de tipo Calendar debe de implementar la interfaz Comparable, e implementar su método compareTo, en la que debes definir su comportamiento, en este caso lo normal es devolver 0 si son iguales, -1 si es menor y 1 si es mayor (o en este caso -1 antes y 1 después).

      Aquí te copio un ejemplo de como se haría esto:

      import java.util.Calendar;
      import java.util.Arrays;
      import java.util.Collections;

      public class Main {
      public static void main(String[] args) {
      Calendar c1 = Calendar.getInstance();
      c1.set(Calendar.MONTH, Calendar.DECEMBER);

      Calendar c2 = Calendar.getInstance();
      c2.set(Calendar.MONTH, Calendar.MAY);

      Calendar c3 = Calendar.getInstance();
      c3.set(Calendar.MONTH, Calendar.APRIL);

      Prueba p1 = new Prueba(c1);
      Prueba p2 = new Prueba(c2);
      Prueba p3 = new Prueba(c3);

      Prueba[] array = new Prueba[] {p1, p3, p2};

      // Ordenado de menor a mayor
      Arrays.sort(array);
      show(array);

      // Ordenado de mayor a menor
      Arrays.sort(array, Collections.reverseOrder());
      show(array);
      }
      public static void show(Prueba[] p) {
      for(Prueba i: p) {
      System.out.print(i + ", ");
      }
      System.out.println();
      }
      static public class Prueba implements Comparable {
      public Calendar cal;
      public Prueba(Calendar cal){
      this.cal = cal;
      }
      @Override
      public int compareTo(Prueba obj) {
      if(cal.getTimeInMillis() < obj.cal.getTimeInMillis()) {
      return -1;
      } else if(cal.getTimeInMillis() > obj.cal.getTimeInMillis()) {
      return 1;
      }
      return 0;
      }
      @Override
      public String toString() {
      return cal.getTime().toString();
      }
      }
      }

      Saludos.

      Eliminar
  7. Hola,

    como se podría hacer para utilizar Sort en arrays múltiples.
    Por ejemplo, si tengo un array bidimensional String y quiero ordenar por la primera columna.

    Gracias

    ResponderEliminar
  8. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  9. Se han borrado algunos comentarios sin querer, igualmente los responderé, este código funciona correctamente para mi.

    public static void main(String[] args) {
    int[] v = new int[100];
    for(int i = 99; i >= 0; i--) {
    v[100 - 1 - i] = i;
    }
    Arrays.sort(v);
    for(int i = 0; i < 100; i++) {
    System.out.print(v[i] + " ");
    }
    System.out.println();
    }

    Saludos.

    ResponderEliminar
  10. tambien me interesa lo de ordenar array bidimensional String basandose en la columna 2.es decir.
    codigo:101, sexo;Hombre, edad;25, cp:8000, cuota;23,5.
    dentro el array tengo varias filas y tengo que ordenalos por edad, de mas joven a mas mayor. seria ir comparando edades y subir la fila entera si procede. llevo 2 dias con eso...
    Gracias, voy justo de tiempo tengo que entragar esta noche.

    ResponderEliminar
  11. y que habría que hacer para utilizar el método sort para ordenar una clase definida por ti, como por ejemplo ordenar un array con figuras geométricas por su área (clase figura)

    ResponderEliminar
    Respuestas
    1. Tu clase Figura debe implementar la interfaz "Comparable" e implementar el método "public int compareTo(Figura otraFigura)".

      La implementación del método deberá devolver 1 si el área de la figura actual es mayor, -1 si es menor ó 0 si es igual al área de otraFigura.

      Una vez hecho esto, puedes hacer un array de figuras y pasarlo como parámetro a la función Arrays.sort().

      Ejemplo de la clase Figura:

      public static class Figura implements Comparable {
      private double area;
      public Figura(double area) {
      this.area = area;
      }
      @Override
      public int compareTo(Figura figura) {
      if (this.area > figura.area) {
      return 1;
      } else if (this.area < figura.area) {
      return -1;
      }
      return 0;
      }
      }

      Uso de la clase figura:

      Figura f1 = new Figura(2.4);
      Figura f2= new Figura(2.7);
      Figura f3 = new Figura(2.6);

      Figura[] figuras = new Figura[]{f1, f2, f3};

      // Orden 2.4, 2.7, 2.6

      Arrays.sort(figuras);

      // Orden 2.4, 2.6, 2.7

      Eliminar
  12. usando este ejemplo podrian imprimir los 2 arreglos de forma ordenada.
    PD: ojo en el ejemplo esta de forma separada.
    gracias.

    ResponderEliminar
  13. se podria usar para un array de objetos con mas de un atributo?

    ResponderEliminar
  14. como le hiciste para aprender java tan bien?

    ResponderEliminar

Publicar un comentario

Si tenéis alguna duda o sugerencia, no dudéis en comentar. ;)

Entradas populares de este blog

Calcular factorial de un numero en JAVA

Modificadores de acceso (public, protected y private) JAVA