Les algorithmes de tri
Le tri par sélection
Le tri par sélection est celui qui utilise le concept le plus simple. Étant donné qu’il existe un algorithme qui permet de renvoyer la valeur la plus petite d’un tableau, on peut l’appliquer systématiquement pour reconstruire un tableau trié. En d’autres termes, à chaque case du tableau que l’on souhaite trier, on effectue une recherche dans la partie de droite pour retrouver l’élément le plus petit. Une fois trouvé, on échange les valeurs.
Le tri à bulles
Il consiste à comparer répétitivement les éléments consécutifs d’un tableau, et à les permuter lorsqu’ils sont mal triés. Il doit son nom au fait qu’il déplace rapidement les plus grands éléments en fin de tableau, comme des bulles d’air qui remonteraient rapidement à la surface d’un liquide.
Le tri par insertion
Le tri par insertion est considéré comme le tri le plus efficace sur des entrées de petite taille. Il est aussi très rapide lorsque les données sont déjà presque triées. La plupart des personnes l’utilisent naturellement pour trier des cartes à jouer.
Le tri rapide
Il existe des familles de tri, plus rapide, mais aussi plus complexe à implémenter. L’un de ces algorithmes est celui de quicksort où l’idée est de diviser pour mieux régner. Cependant, cette famille n’est pas la plus rapide lorsque les données sont déjà triées sauf un seul élément. Il faut préférer le tri par sélection dans ce cas-là. L’idée est de fixer arbitrairement une valeur pivot, et de déplacer les valeurs à droite si elles sont plus grandes que le pivot ou à gauche dans le cas contraire. Une fois fait, il faut rééxécuter ce même algorithme sur ces deux nouvelles parties des tableaux. Il s’agit ici d’un algorithme récursif.
La complexité des tris
Bien que QUICKSORT soit le plus rapide, il existe cependant un cas de figure théorique où l’algorithme est au pire cas en complexité quadratique. Toutefois, malgré ce désavantage, c’est en pratique un des tris les plus rapides, et donc l’un des plus utilisés. Par contre, il restera plus lent que le tri par insertion dans le cas où le tableau est pratiquement déjà entièrement trié.
Il est d’ailleurs possible de combiner deux algorithmes ensembles pour éviter le pire cas. Par exemple, on peut utiliser le tri rapide lorsque le tableau est très grand, mais une fois que l’intervalle est suffisamment petit, on peut utiliser un tri par insertion. C’est exactement le fonctionnement de Introsort.
tri | pire cas | meilleur cas | moyenne | utilisation |
---|---|---|---|---|
sélection | O( n² ) | O( n² ) | O( n² ) | ne pas utiliser |
bulle | O( n² ) | O( n ) | O( n² ) | Idéal sur bande manétique Inéficace sur le matériel moderne |
insertion | O( n² ) | O( n ) | O( n² ) | Idéal si tout est trié sauf le dernier élément Limite au maximum les swap |
rapide | O( n² ) | O( n log n ) | O( n log n ) | Idéal si complétement aléatoire |