Algoritmo de ordenación de Java
Explicaré la diferencia exacta entre Comparable y Comparador en otro artículo. Ese artículo también mostrará cómo crear y encadenar comparadores de forma concisa utilizando Comparator.comparing() desde Java 8.
Las dos variantes se describen en las dos secciones siguientes. Una visión más profunda de las interfaces Comparable y Comparator se proporciona en el artículo “Comparator, Comparable y compareTo – Comparando objetos en Java”.
Este método es llamado por el algoritmo de ordenación para comprobar si un objeto es menor, igual o mayor que otro. Dependiendo de esto, el método debe devolver un número negativo, 0, o un número positivo.
List.of() es la forma más elegante de crear una lista. Sin embargo, la lista creada es inmutable (lo que tiene sentido para la mayoría de los casos de uso de List.of()), y, por lo tanto, no puede ser ordenada. Así que la paso al constructor de ArrayList, que hace una lista mutable a partir de ella. De acuerdo: no es la solución más eficaz, pero hace que el código sea agradable y corto.
Desde Java 8, cada uno de los métodos de ordenación de la clase java.util.Arrays también está disponible en una variante paralela. Distribuyen el esfuerzo de ordenación a partir de un tamaño de array definido (8.192 elementos desde Java 8 a Java 13; 4.097 elementos desde Java 14) a múltiples núcleos de CPU. Un ejemplo:
Java ordenar la matriz de cadenas
Saltar al contenidoAprende a ordenar un array Java de primitivas, cadenas y objetos personalizados de múltiples maneras con la ayuda de las interfaces Comparable y Comparador, Arrays.sort() y Stream.sorted() APIs.Aprenderemos a ordenar arrays en orden natural, orden inverso y cualquier otro orden personalizado también. Tabla de contenidos 1. Conceptos básicos de la ordenación de arraysLos conceptos básicos detrás de la función de ordenación siguen siendo los mismos independientemente de la API de Java que utilicemos para ordenar.Ahora vamos a sumergirnos en los programas java que demuestran la ordenación de arrays. Para la ordenación personalizada, utilizaremos las instancias de la clase User. Obsérvese que la ordenación por defecto está soportada en el campo id.Public class User implements Comparable<User> {
}2. Arrays.sort() y Arrays.parallelSort()La clase java.util.Arrays proporciona muchos métodos estáticos de utilidad. La implementación de la API sort() es una ordenación iterativa, estable y adaptable que requiere menos de n comparaciones lg(n) cuando el array de entrada está parcialmente ordenado. Ofrece el rendimiento de una ordenación por fusión tradicional cuando la matriz de entrada está ordenada aleatoriamente. Si el array de entrada está casi ordenado, la implementación requiere aproximadamente n comparaciones.La implementación de la API parallelSort() es un quicksort de doble pivote que ofrece un rendimiento de O(n log(n)) en todos los conjuntos de datos, y suele ser más rápido que las implementaciones de quicksort tradicionales (de un solo pivote).public static void sort(array, ?comparator)
Java ordenar array por propiedad
Esta guía nos enseñará a ordenar un array en Java sin utilizar el método sort(). Generalmente hay tres formas de ordenar un array. Estos tres algoritmos son bastante eficientes para ordenar cualquier array. Vamos a aprender más acerca de estos algoritmos.Ordenar un array en Java sin usar el método sort() – Bubble SortEntendamos el concepto de bubble sort, que es el algoritmo de ordenación más simple. Básicamente, en este algoritmo, se intercambian repetidamente los elementos adyacentes en el array. Si están en el orden incorrecto, el algoritmo intercambiará los dos elementos. Si te fijas en la imagen de arriba, puedes ver el intercambio de los dos elementos adyacentes. Al final, tenemos el array ordenado. Si hay alguna confusión, echa un vistazo al código de este algoritmo de ordenación de burbujas.Public class Main
El bucle exterior es sólo para pasar por encima del array mientras que el bucle interior intercambia los elementos adyacentes no ordenados en cada pasada. Al final de la última pasada, nos quedamos con el array ordenado.Sort an Array in Java Without Using the sort() Method – Selection SortEl algoritmo de ordenación por selección funciona buscando el elemento mínimo de un array y colocándolo al principio de dicho array. Con cada pasada, encontramos el siguiente elemento más pequeño y lo colocamos a continuación. Finalmente, obtenemos una matriz con dos submatrices. Una submatriz es una matriz ordenada que está al principio de la matriz. La otra submatriz es una matriz no ordenada. En cada pasada, nos movemos en orden ascendente. Si encontráramos primero el elemento más grande, entonces nos moveríamos en orden descendente. Mira la ilustración de abajo.En la ilustración de arriba, el movimiento es en orden descendente, y estamos encontrando los elementos más grandes primero y colocándolos al final. La presentación muestra el array dividido en dos subarreglos, como se ha explicado anteriormente.Public class Main
Java ordena el array de forma descendente
Documentación de Java para java.util.Arrays.sort(T[], int, int, java.util.Comparator<? super T>).Partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android Open Source Project y utilizadas de acuerdo con los términos descritos en la licencia de atribución Creative Commons 2.5.
Documentación de Java para java.util.Arrays.sort(long[], int, int).Partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android Open Source Project y utilizado de acuerdo con los términos descritos en la Licencia de Atribución 2.5 de Creative Commons.
Documentación de Java para java.util.Arrays.sort(int[], int, int).Partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android Open Source Project y utilizado de acuerdo con los términos descritos en la Licencia de Atribución Creative Commons 2.5.
Documentación de Java para java.util.Arrays.sort(short[], int, int).Partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android Open Source Project y utilizado de acuerdo con los términos descritos en la Creative Commons 2.5 Attribution License.