No lo sé, y no tengo ganas de leer javadocs hoy.
Así que déjame profundizar en el código fuente …
Google rápido me da esto … 8b04ee324a1a / src / share / classes / java / util /
- ¿Cómo funciona el algoritmo de Amazon?
- ¿Qué temas en algoritmos modernos no están cubiertos en CLRS?
- ¿Existen constructores de algoritmos comerciales Plug and Play que no requieren ninguna habilidad de codificación?
- ¿Debo ir a un curso de algoritmos o comenzar a resolver problemas en TopCoder / CodeChef, etc.?
- ¿Por qué se ejecuta un análisis de tiempo de un algoritmo llamado asintótico?
Es para OpenJDK8 … puede muy bien diferir entre versiones, pero como no ha especificado una versión (o incluso que es Java, aunque supongo que es), eso es lo que utilizaré.
Y aquí está el código:
público estático <T se extiende Comparable > void sort (List list) {
list.sort (nulo);
}
orden público vacío (Comparador c) {
list.sort (c);
}
etc. y un poco más de excavación hace que parezca que la lista es tipo Lista.
Lista lista = Colecciones.synchronizedList (new ArrayList ());
Entonces … ¡nuestro viaje continúa en la clase Lista! Esto es más divertido de lo que esperaba. Debería hacer esta mierda más a menudo.
Aquí estamos:
clasificación nula predeterminada (Comparador c) {
Objeto [] a = this.toArray ();
Arrays.sort (a, (Comparador) c);
ListIterator i = this.listIterator ();
para (Objeto e: a) {
i.next ();
i.set ((E) e);
}
}
Así que lo han pasado a la clase Arrays, como las cosas de apalancamiento perezoso / abstracción que están … a otra clase …
Y aquí vamos:
tipo vacío público estático (int [] a) {
DualPivotQuicksort.sort (a, 0, a.length – 1, nulo, 0, 0);
}
Entonces, alguna versión de QuickSort, aparentemente.
Fui a esa clase, y encontré esto en los comentarios en la parte superior (así como en el algo más adelante):
* Esta clase implementa el algoritmo Quicksort de doble pivote mediante
* Vladimir Yaroslavskiy, Jon Bentley y Josh Bloch. El algoritmo
* ofrece el rendimiento O (n log (n)) en muchos conjuntos de datos que causan otros
* clasificaciones rápidas para degradar a rendimiento cuadrático, y es típicamente
* más rápido que las implementaciones de Quicksort tradicionales (un pivote).
Aparentemente, es una forma avanzada de QuickSort para maximizar el rendimiento.
Y eso es lo que usa la clase Collections en OpenJDK8 … el tiempo de ejecución es O (n log (n)).