¿Por qué el ordenamiento rápido se denomina ‘rápido’ incluso cuando tiene complejidad O (n2) en el peor de los casos?

Quicksort tiene O ( n 2) peor tiempo de ejecución y O ( n log n ) promedio de tiempo de ejecución del caso. Sin embargo, es mejor combinar el orden en muchos escenarios porque muchos factores influyen en el tiempo de ejecución de un algoritmo y, cuando se combinan todos, gana la selección rápida.

En particular, el tiempo de ejecución a menudo citado de los algoritmos de clasificación se refiere a la cantidad de comparaciones o la cantidad de intercambios necesarios para realizar la clasificación de los datos. De hecho, esta es una buena medida de rendimiento, especialmente porque es independiente del diseño de hardware subyacente. Sin embargo, otras cosas, como la localidad de referencia (es decir, ¿leemos muchos elementos que probablemente están en caché?) También juegan un papel importante en el hardware actual. Quicksort en particular requiere poco espacio adicional y exhibe una buena ubicación de caché, y esto hace que sea más rápido que la fusión en muchos casos.

Además, es muy fácil evitar el tiempo de ejecución de O ( n 2) en el peor de los casos de quicksort casi por completo utilizando una elección adecuada del pivote, como elegirlo al azar (esta es una estrategia excelente).

En la práctica, muchas implementaciones modernas de quicksort (en particular, stst std::sort libstdc ++) son en realidad introsort, cuyo peor caso teórico es O ( n log n ), igual que merge sort. Esto se logra limitando la profundidad de recursión y cambiando a un algoritmo diferente (montón) una vez que excede el log n

Bueno, eso es cierto que en el peor de los casos, la complejidad temporal de la clasificación rápida es O (n ^ 2).

Pero el mejor caso de clasificación rápida, así como la complejidad de tiempo en el peor de los casos, es O (n log n) y funciona mejor que otros algoritmos de clasificación en varios casos, especialmente cuando el número de elementos a clasificar está en el rango de 200 o 300.

Ahora llegando al punto de que la complejidad del tiempo en el peor de los casos es O (n ^ 2), entonces la respuesta es que este peor caso solo es posible en 2 casos:

1.cuando la lista ya está ordenada

2. cuando la lista está en orden inverso

Y a excepción de estas 2 condiciones, en todos los demás casos el algoritmo se comporta en un caso promedio, por lo que la complejidad del tiempo es O (n log n). Y estos dos son eventos bastante raros y, por lo tanto, el algoritmo se comporta principalmente como un caso promedio.

Y, por lo tanto, se llama clasificación rápida, aunque con seguridad no siempre es el caso de que siempre sea rápido y rápido a pesar del nombre.