Para mí tiene sentido que esto acelere la resolución de un problema si las dos mitades requieren menos de la mitad del trabajo de tratar con todo el conjunto de datos.
Esa no es la esencia de los algoritmos de divide y vencerás. Por lo general, el punto es que los algoritmos no pueden "tratar con todo el conjunto de datos" en absoluto. En cambio, se divide en piezas que son triviales de resolver (como ordenar dos números), luego se resuelven trivialmente y los resultados se recombinan de una manera que proporciona una solución para el conjunto de datos completo.
Pero, ¿por qué no dividir el conjunto de datos en tres partes? Cuatro? ¿norte?
Principalmente porque dividirlo en más de dos partes y recombinar más de dos resultados resulta en una implementación más compleja pero no cambia la característica fundamental (Big O) del algoritmo: la diferencia es un factor constante y puede resultar en una desaceleración si la división y recombinación de más de 2 subconjuntos crea una sobrecarga adicional.
Por ejemplo, si realiza una combinación de 3 vías, entonces en la fase de recombinación ahora debe encontrar el mayor de 3 elementos para cada elemento, lo que requiere 2 comparaciones en lugar de 1, por lo que hará el doble de comparaciones en general . A cambio, reduce la profundidad de recursión en un factor de ln (2) / ln (3) == 0.63, por lo que tiene 37% menos intercambios, pero 2 * 0.63 == 26% más comparaciones (y accesos de memoria). Si eso es bueno o malo depende de cuál sea más costoso en su hardware.
También he visto muchas referencias al quicksort de 3 vías. ¿Cuándo es esto más rápido?
Aparentemente, se puede demostrar que una variante de doble pivote de clasificación rápida requiere la misma cantidad de comparaciones, pero en promedio un 20% menos de intercambios, por lo que es una ganancia neta.
¿Qué se usa en la práctica?
Hoy en día, casi nadie programa sus propios algoritmos de clasificación; usan uno provisto por una biblioteca. Por ejemplo, la API de Java 7 en realidad usa el quicksort de doble pivote.
Las personas que realmente programan su propio algoritmo de clasificación por alguna razón tenderán a apegarse a la variante simple de 2 vías porque la menor posibilidad de errores supera el 20% de rendimiento la mayor parte del tiempo. Recuerde: con mucho, la mejora de rendimiento más importante es cuando el código pasa de "no funciona" a "funciona".