¿Qué algoritmo usa Arrays.sort?

En java se 7 versión la colección. Ordenar el algoritmo de clasificación de tiempo que es una combinación de clasificación de fusión y búsqueda binaria y también se llama clasificación híbrida porque puede ordenar todo el tipo de datos. La clasificación de tiempo tiene o (n) tiempo de ejecución en el peor de los casos, pero se encuentra bajo el algoritmo de clasificación secuencial en java

En java se 8 versión la colección. La clasificación utiliza el algoritmo de clasificación paralela para que pueda clasificar los datos en paralelo en función de la granularidad de la matriz o el tamaño de la matriz, esta clasificación es mejor para el caso en que nuestros datos son grandes, entonces 1 millón porque se clasifica utilizando la clasificación de doble pivote cuando el tamaño de los datos es bajo, entonces granularidad y por encima usó otro tipo de clasificación, básicamente, el algoritmo de clasificación java se 8 funciona en el marco fork / join que utilizó el algoritmo de robo de trabajo para clasificar

public static void parallelSort (double [] a) {
int n = a.length, p, g;
si (n <= MIN_ARRAY_SORT_GRAN ||
(p = ForkJoinPool.getCommonPoolParallelism ()) == 1)
DualPivotQuicksort.sort (a, 0, n – 1, nulo, 0, 0);
más
ArraysParallelSortHelpers.FJDouble.Sorter nuevos
(nulo, a, nuevo doble [n], 0, n, 0,
((g = n / (p << 2)) <= MIN_ARRAY_SORT_GRAN)?
MIN_ARRAY_SORT_GRAN: g) .invoke ();
}

Como podemos ver, hay una granularidad mínima (java.util.Arrays.MIN_ARRAY_SORT_GRAN = 8192 [0x2000]), y si la longitud de la matriz es menor que la granularidad mínima, se ordena usando el DualPivotQuicksort.sort directamente en lugar de La partición de tareas de clasificación. Por lo general, el uso de tamaños más pequeños da como resultado una contención de memoria en las tareas que hace que las aceleraciones paralelas sean poco probables.

Otro judement notable es ForkJoinPool.getCommonPoolParallelism () que devuelve el nivel de paralelismo objetivo del pool común (por defecto, igual al número de procesadores disponibles Runtime.getRuntime (). AvailableProcessors ()). Y si su máquina tiene solo 1 subproceso de trabajo, tampoco utilizará tareas paralelas.

Cuando la longitud de la matriz alcanza una granularidad mínima y obtiene más de 1 subproceso de trabajo, la matriz se ordena utilizando el método de clasificación paralela . Y el pool común de ForkJoin se usa para ejecutar tas paralelas

Si quiere saber más, consulte el artículo de geeksforgeek java.

Utiliza la ordenación rápida para el tipo de datos nativo y la ordenación por fusión para objetos.