Tout d'abord, une définition, car c'est assez important: un tri stable est celui qui garantit de ne pas réorganiser les éléments avec des clés identiques.
Recommandations:
Tri rapide: lorsque vous n'avez pas besoin d'un tri stable et que les performances moyennes des cas sont plus importantes que les pires performances. Un tri rapide est O (N log N) en moyenne, O (N ^ 2) dans le pire des cas. Une bonne implémentation utilise le stockage auxiliaire O (log N) sous la forme d'espace de pile pour la récursivité.
Tri par fusion: lorsque vous avez besoin d'un tri stable, O (N log N), il s'agit de votre seule option. Le seul inconvénient est qu'il utilise l'espace auxiliaire O (N) et a une constante légèrement plus grande qu'un tri rapide. Il existe des types de fusion sur place, mais AFAIK ils ne sont pas tous stables ou pires que O (N log N). Même les tris O (N log N) en place ont une constante tellement plus grande que l'ancien tri de fusion simple qu'ils sont plus des curiosités théoriques que des algorithmes utiles.
Tri en tas: lorsque vous n'avez pas besoin d'un tri stable et que vous vous souciez plus des performances des pires cas que des performances moyennes des cas. Il est garanti qu'il est O (N log N) et utilise l'espace auxiliaire O (1), ce qui signifie que vous ne manquerez pas inopinément d'espace de tas ou de pile sur de très grandes entrées.
Introsort: Il s'agit d'un tri rapide qui passe à un tri de tas après une certaine profondeur de récursivité pour contourner le pire des cas O (N ^ 2) du tri rapide. C'est presque toujours mieux qu'un simple tri rapide, car vous obtenez le cas moyen d'un tri rapide, avec des performances garanties O (N log N). La seule raison d'utiliser un tri de tas au lieu de cela est probablement dans les systèmes à forte contrainte de mémoire où l'espace de pile O (log N) est pratiquement significatif.
Tri par insertion : lorsque N est garanti petit, y compris comme cas de base d'un tri rapide ou d'un tri par fusion. Bien que ce soit O (N ^ 2), il a une très petite constante et est un tri stable.
Tri par bulles, tri par sélection : lorsque vous faites quelque chose de rapide et de sale et pour une raison quelconque, vous ne pouvez pas simplement utiliser l'algorithme de tri de la bibliothèque standard. Le seul avantage de ceux-ci par rapport au tri par insertion est d'être légèrement plus facile à mettre en œuvre.
Tris sans comparaison: dans certaines conditions assez limitées, il est possible de briser la barrière O (N log N) et de trier en O (N). Voici quelques cas où cela vaut la peine d'essayer:
Tri par comptage: lorsque vous triez des entiers avec une plage limitée.
Tri par radix: lorsque log (N) est nettement plus grand que K, où K est le nombre de chiffres de base.
Tri par compartiment: lorsque vous pouvez garantir que votre entrée est distribuée à peu près uniformément.