Aquí hay una versión de BSD, los derechos de autor de Apple, presumiblemente utilizado en OS X en algún momento u otro:
http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/kern/qsort.c
Es llamada recursiva, aunque el límite superior en la profundidad de recursión es pequeña , como Blindy explica.
Aquí hay una versión de glibc, presumiblemente utilizado en los sistemas Linux en algún momento u otro:
http://www.umcs.maine.edu/~chaw/200801/capstone/n/qsort.c
Es no llamada recursiva. Por exactamente la misma razón por la que el límite en la recursión de llamadas es pequeño, puede usar una pequeña cantidad fija de la pila para administrar su recursión de bucle.
¿Me molestan las nuevas versiones? No ;-)
Para unos cientos de miles de elementos de matriz, incluso la implementación de llamada recursiva no llamará a más de 20 niveles de profundidad. En el gran esquema de cosas que no es profundo, excepto en dispositivos integrados muy limitados, que no tendrían suficiente memoria para tener una matriz tan grande para ordenar en primer lugar. Cuando N está limitado anteriormente, O (log N) obviamente es constante, pero más que eso es una constante bastante manejable. Por lo general, 32 o 64 veces "pequeño" es "razonable".
+1 para ver realmente el código fuente. Es interesante observar que glibc usa un híbrido de clasificación de inserción/quicksort en su qsort() – nos
@nos: IIRC eso es lo que Knuth le dice que haga, tan interesante pero con suerte no sorprendente ;-) –
+1 por "32 o 64 veces" small 'is' reasonable '":-) –