* Caso promedio: O (log n)
* En promedio, QuickSort divide la entrada en mitades aproximadamente iguales de manera recursiva. La profundidad del árbol de recursión es aproximadamente log₂ n.
* Cada llamada recursiva requiere almacenar los parámetros y devolver la dirección en la pila de llamadas. Por lo tanto, la complejidad del espacio promedio es logarítmica.
* peor de los casos: En)
* El peor de los casos ocurre cuando el elemento pivote da como resultado particiones altamente desequilibradas (por ejemplo, el pivote es siempre el elemento más pequeño o más grande).
*En este escenario, la profundidad de la recursión puede convertirse en *N *, lo que lleva a una complejidad del espacio lineal debido a la pila de llamadas.
* Implementación en el lugar: O (log n) (promedio) o o (n) (peor)
* QuickSort se puede implementar en el lugar, lo que significa que requiere memoria adicional mínima * más allá de * la matriz original. Esto se realiza intercambiando elementos dentro de la matriz de entrada directamente, en lugar de crear muchas matrices nuevas.
* Incluso con una implementación en el lugar, las llamadas recursivas aún consumen espacio en la pila de llamadas. Por lo tanto, la complejidad del espacio sigue siendo O (log n) en promedio y o (n) en el peor de los casos. Algunas implementaciones limitan la profundidad de la recursión para evitar problemas de desbordamiento de pila en el peor de los casos al cambiar a un algoritmo de clasificación diferente (como HeApsort) cuando la recursión se vuelve demasiado profunda.
Consideraciones y optimizaciones clave:
* Optimización de llamadas de cola (TCO): Si el lenguaje de programación y el compilador de compilador de la optimización de llamadas de la cola, la complejidad del espacio puede reducirse a O (1) en los mejores y promedio de casos. Sin embargo, TCO no se implementa comúnmente en muchos idiomas (por ejemplo, Python).
* Selección de pivote aleatorizado: Elegir el pivote al azar ayuda a evitar el peor de los casos.
* Implementación iterativa: La conversión del algoritmo recursivo de Quicksort en uno iterativo también puede eliminar la sobrecarga de la recursión, reduciendo la complejidad del espacio. Sin embargo, esto puede ser más complejo de implementar.
* Enfoque híbrido: La combinación de Quicksort con otros algoritmos, como el tipo de inserción para pequeños subarrañas, puede mejorar el rendimiento y el uso del espacio.
En resumen:
* Teóricamente, la complejidad espacial de QuickSort es O (log n) en promedio y o (n) en el peor de los casos debido a la pila de llamadas recursivas.
* En la práctica, generalmente se prefiere una implementación en el lugar para minimizar el uso de la memoria.
* Comprender el potencial para el comportamiento del peor de los casos es crucial, y las técnicas como la selección de pivote aleatorizado pueden ayudar a mitigarlo.