Sorprendentemente, esto resulta ser importante incluso cuando el quicksort no se enfrenta a particiones increíblemente desequilibradas, e incluso cuando realmente se usa introsort.
Surge el problema (en C++) cuando los valores en el contenedor que se está ordenando son realmente grandes.Con esto, no quiero decir que apuntan a objetos realmente grandes, sino que son realmente grandes. En ese caso, algunos (posiblemente muchos) compiladores también harán que el marco de pila recursivo sea bastante grande, porque necesita al menos un valor temporal para realizar un intercambio. Swap se llama dentro de la partición, que no es recursiva, por lo que se podría pensar que el controlador recursivo de quicksort no requeriría el monster stack-frame; desafortunadamente, la partición generalmente termina siendo inline porque es agradable y corta, y no se llama desde ningún otro lado.
Normalmente la diferencia entre 20 y 40 monturas es despreciable, pero si los valores pesan, digamos, 8kb, entonces la diferencia entre 20 y 40 monturas podría significar la diferencia entre trabajo y desbordamiento de pila, si las pilas tienen se ha reducido en tamaño para permitir muchos hilos.
Si utiliza el algoritmo "siempre recurrente en la partición más pequeña", la pila no puede superar todos los log N marcos, donde N es el número de elementos en el vector. Además, N no puede exceder la cantidad de memoria disponible dividida por el tamaño de un elemento. Así en una máquina de 32 bits, el que podría ser sólo 2 elementos 8KB en un vector, y la profundidad llamada quicksort no podía exceder 19.
En resumen, la escritura quicksort correctamente hace su uso pila predecible (siempre que pueda predecir el tamaño de un marco de pila). No molestarse con la optimización (¡para guardar una sola comparación!) Fácilmente puede causar que la profundidad de la pila se duplique incluso en casos no patológicos, y en casos patológicos puede empeorar mucho.
"¿por qué debería llamar primero a Quicksort en el subconjunto más pequeño?" - porque "junto con la recursividad de la cola asegura que la profundidad de la pila es log n" –
@MitchWheat Sí, pero ¿cómo? – Moeb
¿De dónde leíste esto? – Celeritas