Existen varios algoritmos de clasificación como inserstion sort, sort sort, sort de burbuja, etc. que a menudo se discuten en los libros de texto de informática. Dada una matriz de enteros u objetos, ¿hay una API de lenguaje Java 6 incorporada que me permita elegir aplicar un algoritmo de ordenamiento específico para ordenar la matriz en lugar de reinventar estas ruedas nuevamente? Si no está integrado en Java 6, ¿hay bibliotecas de código abierto que produzcan esta funcionalidad y qué son?¿Qué diferentes algoritmos de clasificación están disponibles en Java 6?
Respuesta
Los métodos Arrays.sort()
usan una ordenación rápida en todas las matrices de tipo primitivo.
El algoritmo de clasificación es un quicksort sintonizado, adaptado de Jon L. Bentley y M. Douglas McIlroy, "Engineering a Sort Function", Software-Practice and Experience, vol. 23 (11) P. 1249-1265 (noviembre de 1993). Este algoritmo ofrece el rendimiento de n * log (n) en muchos conjuntos de datos que causan que otras soluciones rápidas se degraden a rendimiento cuadrático.
El método Collections.sort()
utiliza un tipo de fusión. Este tipo también se usa en Arrays.sort(Object[])
y Arrays.sort(T[], Comparator<? super T>)
.
El algoritmo de clasificación es un mergesort modificado (en el que se omite la fusión si el elemento más alto en la sublista baja es menor que el elemento más bajo en la sublista alta). Este algoritmo ofrece un rendimiento n log (n) garantizado. Esta implementación vuelca la lista especificada en una matriz, ordena la matriz y repite la lista restableciendo cada elemento desde la posición correspondiente en la matriz. Esto evita el rendimiento n2 log (n) que resultaría de intentar ordenar una lista vinculada en su lugar.
Tenga en cuenta que 'Arrays.sort (Object [])' también usa un merge-sort. Si pudieras exprimir eso en alguna parte de tu respuesta, podría eliminar el mío. –
@Bart Gracias, lo agregué a mi respuesta. – Marcelo
Marcelo, ¡salud! :) –
Por lo general, no puede elegir (con la clasificación incorporada, de todos modos). La clase Collections
proporciona un método sort
que debería ser lo suficientemente eficiente para la mayoría de las necesidades.
Arrays.sort(int[] a)
utiliza un quicksort ajustado.
Arrays.sort[Object[] a)
utiliza un mergesort modificado.
- 1. ¿Por qué el método Arrays.sort de Java utiliza dos algoritmos de clasificación diferentes para diferentes tipos?
- 2. Java GUI Frameworks: ¿cuáles están disponibles?
- 3. ¿Qué fuentes están disponibles en Android?
- 4. ¿Qué algoritmos están disponibles para cambiar el tamaño de una tabla hash?
- 5. ¿Qué complementos de compilador scala están disponibles?
- 6. ¿Qué informes están disponibles para svn?
- 7. ¿Qué complementos/utilidades están disponibles para TFS?
- 8. Paquetes de clasificación ordinal y algoritmos
- 9. ¿Qué controladores MySQL están disponibles para node.js?
- 10. ¿Cómo puedo enumerar los algoritmos de cifrado disponibles?
- 11. Windows Mobile - ¿Qué plataformas de scripting están disponibles?
- 12. qué bases de datos nosql están disponibles para azul
- 13. ¿Qué frameworks basados en actores están disponibles para Scala?
- 14. ¿Qué tipos de bases de datos están disponibles en Android?
- 15. ¿Qué comandos de salida de consola están disponibles en Erlang?
- 16. ¿Qué bibliotecas de crawlers web PHP están disponibles?
- 17. Algoritmos de clasificación/relevancia de búsqueda
- 18. ¿Qué bibliotecas de voz están disponibles en Linux?
- 19. ¿Qué fuentes de entropía están disponibles en heroku?
- 20. ¿Qué tipos de mensajes flash están disponibles en Rails?
- 21. ¿Cómo una red de clasificación vence a los algoritmos de clasificación genéricos?
- 22. ¿Qué IDEs están disponibles para R en Linux?
- 23. ¿Qué herramientas gratuitas están disponibles para analizar la contención de bloqueo en java?
- 24. ¿Qué estructuras de datos de árbol Javascript están disponibles?
- 25. Qué herramientas de diseño de pantalla están disponibles
- 26. ¿Qué herramientas de registro de depuración están disponibles desde Javascript?
- 27. ¿Qué hacks de CSS puros específicos de Safari están disponibles?
- 28. ¿Los algoritmos de Java están implementados en C o en Java?
- 29. Compilación de Java 7 a Java 6
- 30. ¿Qué plugins de vim están disponibles para Eclipse?
Tenga en cuenta que esto es diferente en Java 7 - vea http://stackoverflow.com/questions/4018332/is-java-7-using-tim-sort-for-the-method-arrays-sort –
@amc, tienes 48 preguntas sin una respuesta aceptada. Quizás puedas hacer un seguimiento de las respuestas para que puedan ser aceptadas. –