¿Por qué el introsort se convierte de quicksort a heapsort después de cierta profundidad?

Mi suposición educada sobre el umbral de profundidad es la siguiente:

  • Si quicksort se ejecuta normalmente, alcanzará una profundidad de aproximadamente [math] \ log_2 n [/ math] en promedio. No queremos cambiar a heapsort a menos que quicksort realmente no funcione correctamente, por lo que tenemos que esperar al menos [math] \ log_2 n [/ math] antes de cambiar; El umbral que se utiliza realmente proporciona cierto margen de error.
  • Por otro lado, si esperamos mucho más tiempo que [math] O (\ log n) [/ math], entonces, en casos desafortunados, la fase de clasificación rápida de la clasificación puede dominar el tiempo de ejecución. Digamos que esperamos hasta que la profundidad sea [math] \ sqrt {n} [/ math], entonces la cantidad de tiempo invertido en la fase de clasificación rápida puede ser hasta [math] O (n \ sqrt {n}) [/ math] , y el peor de los casos se arruina.

Para equilibrar estos dos problemas, el umbral está en la profundidad correcta, aunque el número 2 es algo arbitrario. Podría haber sido 1.8 o 3. Tal vez el valor 2 se elige en base a pruebas empíricas.

Sí, fue diseñado para eliminar el peor de los casos.

No tengo idea de cómo se eligió la profundidad. Alguien probablemente realizó algunas pruebas.