En el software de servidor web, ¿alguna vez se prefiere la ordenación en lugar de la clasificación rápida, porque un ataque DoS podría desencadenar el comportamiento de clasificación rápida en el peor de los casos?

No-ish

En primer lugar, espero y rezo para que los programas de servidor basados ​​en la web no estén implementando sus propios algoritmos de clasificación. Con suerte, están utilizando las funciones básicas (y, por lo general, auditadas y optimizadas) en su biblioteca estándar.

Un ordenamiento rápido es más rápido y mejor para la mayoría de las cargas de trabajo debido no solo a tener un rendimiento típico rápido, sino también a aprovechar la localidad de caché de la CPU.

De hecho, casi nadie usa un quicksort “puro” para nada. Por ejemplo, las bibliotecas GNU y BSD C en realidad usan una variante de clasificación rápida que retrocede y, en su lugar, utiliza un algoritmo similar a una pila si se detecta que puede ocurrir el peor de los casos. Esto proporciona el mejor rendimiento de quicksort en la mayoría de los casos, al tiempo que evita la posibilidad de descontrolar los peores escenarios. Steel Bank Common Lisp usa un tipo de fusión para la mayoría de las listas, con varias optimizaciones que podrían usar un montón en su lugar; creo que esto se usa para (al menos) ordenar vectores de objetos de tamaño fijo.

Además, es extremadamente difícil construir un DoS intencional de una clasificación rápida sin conocer de antemano el valor de pivote. Dado que eso generalmente se elige al azar (aunque no necesariamente de una fuente de aleatorización de muy alta calidad), sería extremadamente improbable que fuera práctico.

Asumiendo que los programadores (sabiamente) no están tratando de reinventar la rueda, heredarán cualquier optimización y detalles de implementación que puedan cambiar dentro de estas bibliotecas en el futuro.

Si elige un punto de pivote aleatorio en el conjunto de datos (en oposición al primer, último o medio punto como pivote), la probabilidad de que el ordenamiento rápido funcione en su peor caso es extremadamente baja. Solía ​​saberlo pero ya no.

En cuanto al software de servidor web específico, ¿qué quieres decir? ¿Estás hablando del software que acepta solicitudes? ¿Como nginx o apache? ¿O estás hablando de una aplicación web real?

Hecho aleatorio: en realidad, es más eficiente usar la ordenación por inserción y la ordenación rápida en conjugación entre sí. ¿Por qué? Debido a este gráfico:

Aunque la ordenación por inserción crece mucho más rápido (n ^ 2) que la clasificación rápida (nlogn), notará que hay una pequeña sección donde se cruzan. Para los puntos antes de la intersección, el orden de inserción es realmente mejor.