En un curso de algoritmos estándar se nos enseña que quicksort es en promedio y en el peor de los casos. Al mismo tiempo, se estudian otros algoritmos de clasificación que son en el peor de los casos (como mergesort y heapsort ), e incluso tiempo lineal en el mejor de los casos (como bubbleort ) pero con algunas necesidades adicionales de memoria.O ( n 2 ) O ( n log n )
Después de un rápido vistazo a algunos tiempos de ejecución más , es natural decir que quicksort no debería ser tan eficiente como otros.
Además, tenga en cuenta que los estudiantes aprenden en los cursos de programación básica que la recursividad no es realmente buena en general porque podría usar demasiada memoria, etc. Por lo tanto (y aunque esto no es un argumento real), esto da la idea de que la clasificación rápida podría no ser realmente bueno porque es un algoritmo recursivo.
¿Por qué, entonces, la clasificación rápida supera a otros algoritmos de clasificación en la práctica? ¿Tiene que ver con la estructura de los datos del mundo real ? ¿Tiene que ver con la forma en que funciona la memoria en las computadoras? Sé que algunos recuerdos son mucho más rápidos que otros, pero no sé si esa es la verdadera razón de este rendimiento contraintuitivo (en comparación con las estimaciones teóricas).
Actualización 1: una respuesta canónica dice que las constantes involucradas en el del caso promedio son más pequeñas que las constantes involucradas en otros algoritmos . Sin embargo, todavía tengo que ver una justificación adecuada de esto, con cálculos precisos en lugar de solo ideas intuitivas.O ( n log n )
En cualquier caso, parece que la diferencia real ocurre, como sugieren algunas respuestas, a nivel de memoria, donde las implementaciones aprovechan la estructura interna de las computadoras, utilizando, por ejemplo, que la memoria caché es más rápida que la RAM. La discusión ya es interesante, pero aún me gustaría ver más detalles con respecto a la administración de memoria, ya que parece que la respuesta tiene que ver con eso.
Actualización 2: hay varias páginas web que ofrecen una comparación de algoritmos de clasificación, algunas más elegantes que otras (más notablemente sorting-algorithms.com ). Aparte de presentar una buena ayuda visual, este enfoque no responde a mi pregunta.