Ceci est une rediffusion d'une question sur cs.SE par Janoma . Crédits complets et butin pour lui ou cs.SE.
Dans un cours d'algorithmes standard, nous apprenons que le tri rapide est O (n log n) en moyenne et O (n²) dans le pire des cas. Dans le même temps, d'autres algorithmes de tri sont étudiés qui sont O (n log n) dans le pire des cas (comme mergesort et heapsort ), et même le temps linéaire dans le meilleur des cas (comme bubbleort ) mais avec des besoins de mémoire supplémentaires.
Après un coup d'œil rapide sur certains temps de fonctionnement supplémentaires, il est naturel de dire que le tri rapide ne devrait pas être aussi efficace que d'autres.
De plus, considérez que les étudiants apprennent dans les cours de programmation de base que la récursivité n'est pas vraiment bonne en général car elle pourrait utiliser trop de mémoire, etc. vraiment bon car c'est un algorithme récursif.
Pourquoi, alors, le tri rapide surpasse-t-il les autres algorithmes de tri dans la pratique? Cela a-t-il à 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 beaucoup plus rapides que d'autres, mais je ne sais pas si c'est la vraie raison de cette performance contre-intuitive (par rapport aux estimations théoriques).