Dans un cours sur les algorithmes standard, on nous apprend que quicksort est en moyenne et dans le pire des cas. Dans le même temps, d'autres algorithmes de tri sont étudiés, qui sont dans le pire des cas (comme mergesort et heapsort ) et même un temps linéaire dans le meilleur des cas (comme bubblesort ) mais avec quelques besoins supplémentaires en mémoire.O ( n 2 ) O ( n log n )
Après un rapide coup d'œil sur quelques temps supplémentaires, il est naturel de dire que le tri rapide ne devrait pas être aussi efficace que d'autres.
En outre, considérez que les étudiants apprennent dans les cours de programmation de base que la récursivité n’est pas très bonne en général car elle pourrait utiliser trop de mémoire, etc. Par conséquent (même si ce n’est pas un argument réel), cela donne à penser vraiment bon parce que c'est un algorithme récursif.
Pourquoi, alors, quicksort surpasse-t-il les autres algorithmes de tri en pratique? Est-ce que cela a à voir avec la structure des données du monde réel ? Cela a-t-il à voir avec le fonctionnement de la mémoire dans les ordinateurs? Je sais que certains souvenirs sont bien plus rapides que d'autres, mais je ne sais pas si c'est la véritable raison de cette performance contre-intuitive (comparée aux estimations théoriques).
Mise à jour 1: une réponse canonique indique que les constantes impliquées dans du cas moyen sont plus petites que les constantes impliquées dans d’autres algorithmes . Cependant, je n'ai pas encore vu de justification valable à cela, avec des calculs précis au lieu d'idées intuitives.O ( n log n )
Quoi qu’il en soit, il semble que la vraie différence se produise, comme le suggèrent certaines réponses, au niveau de la mémoire, où les implémentations tirent parti de la structure interne des ordinateurs, en utilisant, par exemple, le fait que la mémoire cache est plus rapide que la RAM. La discussion est déjà intéressante, mais j'aimerais quand même voir plus de détails en ce qui concerne la gestion de la mémoire, car il semble que la réponse y soit.
Mise à jour 2: Il existe plusieurs pages Web offrant une comparaison des algorithmes de tri, certaines plus sophistiquées que d'autres (plus particulièrement, tri-algorithms.com ). À part la présentation d'un bel outil visuel, cette approche ne répond pas à ma question.