Académique Documents
Professionnel Documents
Culture Documents
TRI ET COMPLEXITE
Ing corneille M. HOUNSOUNOU
Corneille.hounsounou@fast.uac.bj
95 44 38 56
Objectif
Mais un beau jour tu vas débarquer en entretien de façon nonchalante en te disant que
tu sais tout. Et là, on va te demander d’implémenter un tri fusion. Tu vas te sentir
seul à regarder l’écran et ne plus savoir quoi faire.
Tri à bulles (bubble sort)
Le tri à bulles est de loin le plus simple de tous les algos de tri. D’ailleurs c’est pour
ça qu’il est super lent et quasiment jamais utilisé. Mais c’est un classico. Si tu le connais
pas, c’est pas normal.
La logique est simple:
• On passe sur chaque élément du tableau et on le compare à son voisin de droite.
• Si le voisin de droite est plus petit alors les deux éléments permutent, car
l’élément le plus petit devrait être à gauche.
• On fait autant de passe que nécessaire jusqu’à que tout le tableau soit trié.
La condition d’arrêt étant le fait qu’aucune permutation n’ait été nécessaire dans une
passe.
Démontration
ALGO
Algorithme Tri_a_Bulles
local: i , j , n, temp Î Entiers naturels
Entrée : Tab Î Tableau d'Entiers naturels de 1 à n éléments
Sortie : Tab Î Tableau d'Entiers naturels de 1 à n éléments
début
pour i de n jusquà 1 faire // recommence une sous-suite (a1, a2, ... , ai)
pour j de 2 jusquà i faire // échange des couples non classés de la sous-suite
si Tab[ j-1 ] > Tab[ j ] alors // aj-1et aj non ordonnés
temp ¬ Tab[ j-1 ] ;
Tab[ j-1 ] ¬ Tab[ j ] ;
Tab[ j ] ¬ temp //on échange les positions de aj-1et aj
Fsi
fpour
fpour
Fin Tri_a_Bulles
Tri par insertion (Insertion sort)
Le tri par insertion fait également partie des algorithmes de tri les plus simples à comprendre et à
utiliser. Et comme souvent, sa simplicité vient avec le prix d’une mauvaise performance sur de
larges séquences de données. On est toujours sur un algorithme assez lent avec beaucoup de
diviser pour régner“. Il est légèrement plus complexe que les algorithmes
séquences de données.
Tri fusion (merge sort)
C’est en comparant et permutant les éléments niveau par niveau qu’on construit
un nouveau tableau trié !
Démonstration
Démonstration
Algorithme Tri_fusion /Version 2/
local: m, i , j , n, temp Î Entiers naturels
Entrée : Tab Î Tableau d'Entiers naturels de 1 à n éléments
Sortie : Tab Î Tableau d'Entiers naturels de 1 à n éléments début
pour i de 1 jusquà n-1faire // recommence une sous-suite
m ¬ i ; // i est l'indice de l'élément frontière ai = Tab[ i ]
pour j de i+1 jusquà n faire// (ai+1, a2, ... , an)
si Tab[ j ] < Tab[ m ] alors // aj est le nouveau minimum partiel
m ¬ j ; // indice mémorisé
Fsi
fpour;
temp ¬ Tab[ m ] ;
Tab[ m ] ¬ Tab[ i ] ;
Tab[ i ] ¬ temp //on échange les positions de ai et de aj
fpour
Fin Tri_Selection
Tri rapide (quick sort)
Le tri rapide (quicksort), ou tri pivot, fait aussi partie de la famille des algorithmes
“diviser pour régner”. Lui aussi utilise donc de la récursivité et sa logique est un peu
plus complexe. Comme le tri fusion, il est cependant grandement utilisé dans les
langages modernes.
Tri rapide (quick sort)
élément est le pivot pour une itération sur le tableau. Y’a différente façon de choisir un pivot,
on ne va pas rentrer là-dedans, aujourd’hui le pivot sera toujours le dernier élément du tableau.
Tri rapide (quick sort)
• Toutes les valeurs plus basses que ce pivot vont à gauche de ce sous-tableau.
• Le pivot au milieu de ce sous-tableau.
• Toutes les valeurs plus grandes que ce pivot vont à droite.
Démonstration
ALGO
fonction Partition( G , D : entier ) résultat : entier
Local : i , j , piv , temp : entier
début
piv ¬ Tab[D];
i ¬ G-1;
j ¬ D;
repeter Algorithme TriRapide( G , D : entier );
repeter i ¬ i+1 jusquà Tab[i] >= piv; Local : i : entier
repeter j ¬ j-1 jusquà Tab[j] <= piv; début
temp ¬ Tab[i]; si D > G alors
Tab[i] ¬ Tab[j]; i ¬ Partition( G , D );
Tab[j] ¬ temp TriRapide( G , i-1 );
jusquà j <= i; TriRapide( i+1 , D );
Tab[j] ¬ Tab[i];
Fsi
Tab[i] ¬ Tab[d];
Tab[d] ¬ temp;
FinTRiRapide
résultat ¬ i
FinPartition
Merci pour l’attention
A VOS CLAVIERS