Estaba buscando el código fuente del método sort() del java.util.ArrayList en grepcode. Parecen usar ordenación por inserción en arreglos pequeños (del tamaño < 7) y fusionar ordenación en arreglos grandes. Me preguntaba si eso hace una gran diferencia, ya que utilizan la ordenación por inserción solo para matrices de tamaño < 7. La diferencia en el tiempo de ejecución apenas se notará en las máquinas modernas.Java.util.ArrayList.sort() algoritmo de ordenación
He leído esto en Cormen:
Aunque ordenamiento por mezcla se ejecuta en O (n * log n) peor de los casos tiempo y ordenación por inserción se ejecuta en O (n * n) tiempo en el peor de los casos, la constante los factores en la ordenación por inserción pueden hacerlo más rápido en la práctica para tamaños de problema pequeños en muchas máquinas. Por lo tanto, tiene sentido engrosar las hojas de la recursión mediante el uso de ordenación de inserción dentro del tipo de combinación cuando los subproblemas son lo suficientemente pequeños.
Si hubiera diseñado algoritmo de ordenación por algún componente que requiero, entonces me gustaría considerar el uso de inserción de clasificación para mayores tamaños (quizá upto tamaño < 100) antes de que la diferencia en tiempo de ejecución, en comparación con el ordenamiento por mezcla , se vuelve evidente
Mi pregunta es ¿cuál es el análisis detrás de llegar al tamaño < 7?
Estoy obteniendo un poco de su punto ahora. Supongamos que si tuviéramos una matriz muy grande, la clasificación recursiva dividirá la matriz en numerosas matrices pequeñas. Ahí es donde supongo que la eficiencia del tipo de inserción se activa para hacer su trabajo. –
@ sultan.of.swing: Exactamente. – NPE
Sí, creo que responde mi pregunta. Excepto que necesitaría analizar los resultados de la evaluación comparativa para creer en el concepto de elegir el tamaño siete :) –