Nunca elija un pivote fijo; esto puede ser atacado para explotar el peor tiempo de ejecución O (n ^ 2) de su algoritmo, que solo está buscando problemas. El peor tiempo de ejecución de Quicksort ocurre cuando la partición da como resultado una matriz de 1 elemento y una matriz de n-1 elementos. Suponga que elige el primer elemento como partición. Si alguien alimenta una matriz a su algoritmo que está en orden decreciente, su primer pivote será el más grande, por lo que todo lo demás en la matriz se moverá a la izquierda. Luego, cuando recurras, el primer elemento volverá a ser el más grande, así que una vez más pones todo a la izquierda, y así sucesivamente.
Una mejor técnica es el método de la mediana de 3, en el que se seleccionan tres elementos al azar y se elige el medio. Sabes que el elemento que elijas no será el primero ni el último, pero también, según el teorema del límite central, la distribución del elemento medio será normal, lo que significa que tenderás hacia el medio (y por tanto , n lg n tiempo).
Si absolutamente desea garantizar el tiempo de ejecución O (nlgn) para el algoritmo, el método de columnas de 5 para encontrar la mediana de una matriz se ejecuta en el tiempo O (n), lo que significa que la ecuación de recurrencia para la ordenación rápida en el peor de los casos será sea T (n) = O (n) (encuentre la mediana) + O (n) (partición) + 2T (n / 2) (recursiva izquierda y derecha). Según el Teorema principal, esto es O (n lg n) . Sin embargo, el factor constante será enorme, y si el rendimiento en el peor de los casos es su principal preocupación, utilice una ordenación combinada en su lugar, que es solo un poco más lenta que la ordenación rápida en promedio y garantiza el tiempo O (nlgn) (y será mucho más rápido que este rápido ordenamiento medio cojo).
Explicación del algoritmo de la mediana de medianas