Académique Documents
Professionnel Documents
Culture Documents
5-Algorithmes de Tri
5-Algorithmes de Tri
On peut distinguer :
les tris internes qui trient les éléments dans la structure qui les contient
(tableau, liste, ...) ou au pire utilise une structure annexe de même type
les tris externes utilisés lorsque la quantité d'éléments à trier est telle qu'ils ne
tiennent pas en mémoire vive et qu'il faut stocker des éléments dans des
fichiers ou des tables de bases de données
Le tri à bulle est en place et l'algorithme donné ici est stable (il
serait instable si on utilisait ≥ au lieu de >)
Remarques :
la complexité au pire et en moyenne reste en O(n2) mais est linéaire au mieux
cette amélioration n'est efficace que si le tableau est déjà « un peu » trié et
qu'il devient trié « assez vite »
Licence Informatique - Semestre 2 - Algorithmique et Programmation 7
Remarque : le tri sélection utilise une variable de plus que le tri bulle pour stocker
l'indice du plus grand élément, mais il utilise moins d'instructions (une seule
permutation par parcours du tableau)
Le tri sélection est en place et l'algorithme donné ici est stable (il
serait instable si on utilisait ≥ au lieu de >)
Le tri par insertion est en place et l'algorithme donné ici est stable
(il serait instable si on utilisait ≥ au lieu de >)
Remarque : le tri insertion est donc environ 2 fois plus rapide que le tri sélection
// cette fonction trie les éléments de tab d'indices compris entre a et b inclus
fonction sans retour triRapide(entier[] tab, entier a, entier b){
entier pivot;
début
si (b > a) alors
pivot <- partition(tab,a,b);
triRapide(tab,a,pivot-1);
triRapide(tab,pivot+1,b);
finsi
fin
Licence Informatique - Semestre 2 - Algorithmique et Programmation 17
Le tri rapide n'est pas optimum dans tous les cas, mais en
moyenne, il est bien plus rapide que les tris quadratiques
Le tri rapide est en place, mais l'algorithme donné ici n'est pas
stable
Licence Informatique - Semestre 2 - Algorithmique et Programmation 19
quand le tableau n'est pas « un peu trié », on peut découvrir l'élément médian
(tel que la moitié des éléments du tableau sont plus petits, et la moitié plus
grands, à 1 près) avec un algorithme linéaire. Cette amélioration assure donc
une complexité au pire en O(n*log(n)) au tri rapide.
quand les parties à trier sont petites, il peut être plus rapide d'utiliser un tri par
sélection pour les trier car ce tri est plus rapide sur de petits tableaux
...
Complexité du tri-fusion :
la complexité de la fusion est linéaire de la forme a*n où a est une constante
la complexité du tri est c(n) = c(n/2) + c(n/2) + a*n + b où b est une constante
donc c(n) = O(n*log(n)) dans tous les cas
Le tri fusion est stable mais la version proposée ici n'est pas en
place (il est possible d'en écrire des versions en place)
Licence Informatique - Semestre 2 - Algorithmique et Programmation 23
Tris quasilinéaires
Comparaison des tris quasilinéaires sur des tableaux d'entiers générés
aléatoirement