Utilisez Bubble Sort uniquement lorsque les données à trier sont stockées dans une mémoire à tambour rotatif. C'est optimal à cette fin, mais pas pour la mémoire à accès aléatoire. De nos jours, cela revient à "ne pas utiliser Bubble Sort".
Utilisez Insertion Sort ou Selection Sort jusqu'à une taille que vous déterminez en le testant contre les autres types de tri disponibles. Cela revient généralement à environ 20 à 30 éléments, mais cela peut varier. En particulier, lors de la mise en œuvre de tri par division et conquête comme Merge Sort et Quick Sort, vous devriez "sortir" vers un tri par insertion ou un tri par sélection lorsque votre bloc de données actuel est suffisamment petit.
Utilisez également Insertion Sort sur des données presque triées, par exemple si vous savez d'une manière ou d'une autre que vos données étaient triées auparavant et n'ont pas beaucoup changé depuis.
Utilisez Merge Sort lorsque vous avez besoin d'un tri stable (c'est aussi bon pour le trier les listes chaînées), attention car pour les tableaux, il utilise une mémoire supplémentaire significative.
Généralement, vous n'utilisez pas du tout le "simple" Quick Sort, car même avec un choix intelligent de pivots, il a toujours un pire cas de Omega(n^2)
, mais contrairement à Insertion Sort, il n'a pas de meilleurs cas utiles. Les cas "meurtriers" peuvent être construits de manière systématique, donc si vous triez des données "non fiables", un utilisateur pourrait délibérément nuire à vos performances, et de toute façon il pourrait y avoir une raison spécifique à votre domaine pour laquelle vos données s'approximent à des cas meurtriers. Si vous choisissez des pivots aléatoires, alors la probabilité de cas meurtriers est négligeable, c'est donc une option, mais l'approche habituelle est "IntroSort" - un QuickSort qui détecte les mauvais cas et bascule vers HeapSort.
Le Radix Sort est un peu particulier. Il est difficile de trouver des problèmes courants pour lesquels il est le meilleur, mais il a une limite asymptotique intéressante pour les données de largeur fixe (O(n)
, là où les tris par comparaison sont Omega(n log n)
). Si vos données sont de largeur fixe et que l'entrée est plus grande que le nombre de valeurs possibles (par exemple, plus de 4 milliards d'entiers sur 32 bits), alors il y a une chance qu'une forme de tri par radix performe bien.