Vue d d'ensemble ensemble Introduction aux algorithmes de tri Les tris séquentiels Méthodologie de la programmation –E2I.1Les algorithmes de tri Les tris récursifs C ill CHAVET Cyrille 2 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Plan Généralités Vérifier la correction Notions de complexité Objectifs Tri: ¾ Ordonner un ensemble d’éléments selon un ensemble de clés sur lesquelles Introduction aux algorithmes de tri est définie une relation d’ordre ¾ Gé Généralités é lité ¾ Vérifier la correction ¾ Notions de complexité Algorithmes fondamentaux en informatique: ¾ Base de données, ordonnancement... Les tris séquentiels Illustration de concepts vus précédemment: Les tris récursifs ¾ Boucles, Récursivité Introduction de concepts clefs en informatique: ¾ Complexité C l ié ¾ Stratégie «Diviser pour régner» 3 4 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Généralités Vérifier la correction Notions de complexité Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Procédure d d’échange échange Généralités Vérifier la correction Notions de complexité Concept d’invariant d invariant de boucle Les algorithmes de tri utilisent une procédure permettant Prouver la validité d’un algorithme d’échanger (de permuter) deux variables. Définition: ¾ Un invariant de boucle est une propriété qui reste vraie à Procédure Echanger (a,b : Entier) Déclaration Temp : Entier Début Temp ←a a←b b ← Temp Fin chaque passage dans la boucle (en un point précis) Il faut donc: ¾ Définir un invariant qui assure qu’à la fin la propriété voulue est satisfaite ¾ S’assurer qu’il est vrai avant d’entrer dans la boucle ¾ Vérifier é par récurrence é qu’il reste vrai après è chaque exécution é de la boucle 5 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Généralités Vérifier la correction Notions de complexité 6 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Exemple d d’invariant invariant de boucle Généralités Vérifier la correction Notions de complexité Exemple d d’invariant invariant de boucle Produit des chiffres d d’un un nombre Produit des chiffres d d’un un nombre Fonction ProduitsChiffres(n : Entier) : Entier Déclaration x : Entier Début x←1 Répéter x ← x*(n mod 10) n ← n / 10 Jusqu’à (n < 1) Fi Fin Fonction ProduitsChiffres(n : Entier) : Entier Déclaration x : Entier Début x←1 Répéter x ← x*(n mod 10) n ← n / 10 Jusqu’à (n < 1) Fin Fi Exemple: ProduitChiffres(1234) = 1*2*3*4 = 24 7 Précondition: n>0, x=1 8 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Généralités Vérifier la correction Notions de complexité Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Exemple d d’invariant invariant de boucle Généralités Vérifier la correction Notions de complexité Exemple d d’invariant invariant de boucle Produit des chiffres d d’un un nombre Fonction ProduitsChiffres(n : Entier) : Entier Déclaration x : Entier Début x←1 Répéter x ← x*(n mod 10) n ← n / 10 Jusqu’à (n < 1) Fin Fi Produit des chiffres d d’un un nombre Précondition: n>0, x=1 Fonction ProduitsChiffres(n : Entier) : Entier Déclaration x : Entier Début x←1 Répéter x ← x*(n mod 10) n ← n / 10 Jusqu’à (n < 1) Fi Fin Invariant: - ni = n/10i - xi = produit des chiffres de (n-10i*ni) Précondition: n>0, x=1 Invariant: - ni = n/10i - xi = produit des chiffres de (n-10i*ni) Terminaison: i > log10(n), (n) ni = 0 Correction: xi = produit des chiffres de (n) 9 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs 10 Généralités Vérifier la correction Notions de complexité Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Exemple d d’invariant invariant de boucle Généralités Vérifier la correction Notions de complexité Evaluer la complexité d d’un un algorithme Produit des chiffres d d’un un nombre Idée: ¾ Compter le nombre de permutations, le nombre de tours dans une boucle… Fonction ProduitsChiffres(n : Entier) : Entier Déclaration x : Entier Début x←1 Répéter x ← x*(n mod 10) n ← n / 10 Jusqu’à (n < 1) Fi Fin Précondition: n>0, x=1 Invariant: - ni = n/10i - xi = produit des chiffres de (n-10i*ni) Terminaison: i > log10(n), (n) ni = 0 Correction: xi = produit des chiffres de (n) Fonction Exemple(n : Entier) : Entier Déclaration i, j : Entier Déb t Début … pour i de 0 à n-1 pour j de d 0 à n-1 1 … fin pour fin pour … Fin 11 12 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Généralités Vérifier la correction Notions de complexité Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Evaluer la complexité d d’un un algorithme Généralités Vérifier la correction Notions de complexité Evaluer la complexité d d’un un algorithme Idée: Idée: ¾ Compter le nombre de permutations, le nombre de tours dans les boucles… Fonction Exemple(n : Entier) : Entier Déclaration i, j : Entier Déb t Début … pour i de 0 à n-1 pour j dde 0 à n-1 1 … fin pour fin pour … ¾ Compter le nombre de permutations, le nombre de tours dans une boucle… Définition: ¾ Déterminer une fonction f: + q , qui, à un paramètre n dépendant de la donnée soumise à l'algorithme (n est la taille de cette donnée, e.g. la taille du tableau a trier), associe le coût f(n) (exprimé en unités arbitraires de temps ou d'espace) de ll'exécution exécution de algorithme pour la donnée n tours Fin n tours ⇒ Soient n*n = n2 tours, La complexité de cet algorithme peut ss’exprimer exprimer en O(n2) 13 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs 14 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Plan Tri a bulles Tri par sélection Tri par insertion Tri par sélection Algorithme de Tri à bulles Idée de M. M De Lapalisse : ¾ Un tableau trié en ordre croissant, c’est un tableau dans lequel tout élément est plus petit que celui qui le suit… Introduction aux algorithmes de tri Principe de la méthode : ¾ Sélectionner le minimum du tableau en parcourant le tableau de la g tout couple p d'éléments consécutifs fin au début,, et en échangeant non ordonnés Les tris séquentiels ¾ Tri à bulles ¾ Tri par sélection ¾ Tri par insertion Les tris récursifs Cet algorithme sera vu en TD … 15 16 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri a bulles Tri par sélection Tri par insertion Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par sélection Tri a bulles Tri par sélection Tri par insertion Tri par sélection Algorithme de Tri par sélection Idée: Idée: ¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du tableau et on place ce dernier dans la première case. On poursuit ensuite avec le 2ième élément… ¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du tableau et on place ce dernier dans la première case. On poursuit ensuite avec le 2ième élément… pour i de 1 à N-1: N 1: min = i pour j de i+1 à N: si Tj < Tmin i alors min = j 1 N Echanger(Ti, Tmin) 17 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri a bulles Tri par sélection Tri par insertion Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Déroulement de ll’algorithme algorithme Tri a bulles Tri par sélection Tri par insertion Tri par sélection Déroulement de ll’algorithme algorithme Idée: Idée: ¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du tableau et on place ce dernier dans la première case. On poursuit ensuite avec le 2ième élément… pour i de 1 à N N-1: 1: min = i pour j de i+1 à N: si Tj < Tmin alors min = j 18 Min = 1 ¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du tableau et on place ce dernier dans la première case. On poursuit ensuite avec le 2ième élément… pour i de 1 à N N-1: 1: min = i pour j de i+1 à N: si Tj < Tmin alors min = j 5 8 3 4 6 0 7 9 1 10 2 Echanger(Ti, Tmin) min min 5 8 3 4 6 0 7 9 1 10 2 Echanger(Ti, Tmin) 19 20 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri a bulles Tri par sélection Tri par insertion Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Déroulement de ll’algorithme algorithme Tri a bulles Tri par sélection Tri par insertion Tri par sélection Déroulement de ll’algorithme algorithme Idée: Idée: ¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du tableau et on place ce dernier dans la première case. On poursuit ensuite avec le 2ième élément… min pour i de 1 à N N-1: 1: min = i pour j de i+1 à N: si Tj < Tmin alors min = j ¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du tableau et on place ce dernier dans la première case. On poursuit ensuite avec le 2ième élément… min pour i de 1 à N N-1: 1: min = i pour j de i+1 à N: si Tj < Tmin alors min = j 5 8 3 4 6 0 7 9 1 10 2 0 8 3 4 6 5 7 9 1 10 2 Echanger(Ti, Tmin) 0 8 3 4 6 5 7 9 1 10 2 Echanger(Ti, Tmin) 21 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs 22 Tri a bulles Tri par sélection Tri par insertion Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Invariants de boucles Tri a bulles Tri par sélection Tri par insertion Tri par sélection Complexité de ll’algorithme algorithme Idée: Idée: ¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du tableau et on place ce dernier dans la première case. On poursuit ensuite avec le 2ième élément… pour i de 1 à N-1: {∀x, y ∈ [1..i − 1], ∀z ∈ [i..N ] : (x < y ⇒ Tx ≤ Ty ) et (Tx ≤ Tz ) } 1 n(n − 1) ⇔ Ο n2 2 ( ) N i Définitivement trié min = i pour j de i+1 à N: {∀x ∈ [i.. j − 1], T min ≤ Tx } si Tj < Tmin alors min = j Echanger(Ti, Tmin) 1 i j ¾ Compter le nombre de test : Tj < Tmin ¾ Complexité du pire cas N Tmin = Min(T[i..j-1]) 23 24 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri a bulles Tri par sélection Tri par insertion Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par insertion Tri a bulles Tri par sélection Tri par insertion Tri par sélection Invariants de boucles Idée: Idée: ¾ A la nième itération, le nième élément est inséré à la bonne place dans le ¾ A la nième itération, le nième élément est inséré à la bonne place dans le tableau trié… tableau trié… pour i de 2 à N: {∀x, y ∈ [1..i − 1]: (x < y ⇒ T pour i de 2 à N: val = Ti j = i-1 x 1 N ≤ Ty ) } 1 val = Ti j = i-1 tant que j≠0 etpuis Tj>val Tj+1 = Tj j = j-1 N i Tri(pg) tant que j≠0 etpuis Tj>val {(T [1.. j ]& T [ j + 2] = T [1..i − 1]) et ( j + 2 ≤ i ⇒ T 0 Tj+1 = val 1 j > val )} j +2 i N Tj+1 = Tj j = j-1 Tj+1 = val 25 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs 26 Tri a bulles Tri par sélection Tri par insertion Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Complexité de ll’algorithme algorithme Plan Idée: ¾ Compter le nombre de transfert : Tj+1 < Tj ¾ Complexité du pire cas Introduction aux algorithmes de tri Les tris séquentiels n(n − 1) ⇔ Ο n2 2 ( ) Les tris récursifs ¾ Tri par fusion ¾ Tri par segmentation 27 28 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par fusion Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par fusion Diviser pour régner Diviser pour régner Idée : ¾ On divise le tableau en deux, deux les sous tableaux sont triés puis fusionnés Idée : ¾ On divise le tableau en deux, deux les sous tableaux sont triés puis fusionnés Procédure de fusion de sous tableaux: ¾ Interclasser(T: tableau de [1..N]; i,m,s: entiers dans [1..N]) ¾ Sous tableaux:T[i,m] T[i m] et T[m+1,s] T[m+1 s] ¾ Résultat: T[i,s] 29 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs 30 Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par fusion Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par fusion Sous fonction: TriFusion ¾ Tri du tableau T entre inf et sup Sous fonction: TriFusion ¾ Tri du tableau T entre inf et sup TRI: TriFusion(1,N) TRI: TriFusion(1,N) TriFusion (Inf, Sup : Entiers): mil = (inf + sup) div 2 TriFusion(inf mil) TriFusion(inf, TriFusion(mil+1, sup) Interclasser(T, inf, mil, sup) TriFusion (Inf, Sup : Entiers): mil = (inf + sup) div 2 TriFusion(inf mil) TriFusion(inf, TriFusion(mil+1, sup) Interclasser(T, inf, mil, sup) 31 32 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par fusion Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par fusion Sous fonction: TriFusion ¾ Tri du tableau T entre inf et sup Sous fonction: TriFusion ¾ Tri du tableau T entre inf et sup TRI: TriFusion(1,N) TRI: TriFusion(1,N) TriFusion (Inf, Sup : Entiers): mil = (inf + sup) div 2 TriFusion(inf mil) TriFusion(inf, TriFusion(mil+1, sup) Interclasser(T, inf, mil, sup) TriFusion (Inf, Sup: Entiers): mil = (inf + sup) div 2 TriFusion(inf mil) TriFusion(inf, TriFusion(mil+1, sup) Interclasser(T, inf, mil, sup) 33 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs 34 Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par fusion Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par fusion Sous fonction: TriFusion ¾ Tri du tableau T entre inf et sup Sous fonction: TriFusion ¾ Tri du tableau T entre inf et sup TRI: TriFusion(1,N) TRI: TriFusion(1,N) TriFusion (Inf, Sup): mil = (inf + sup) div 2 TriFusion(inf mil) TriFusion(inf, TriFusion(mil+1, sup) Interclasser(T, inf, mil, sup) TriFusion (Inf, Sup): mil = (inf + sup) div 2 TriFusion(inf mil) TriFusion(inf, TriFusion(mil+1, sup) Interclasser(T, inf, mil, sup) 35 36 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par fusion Tri par fusion Tri par segmentation Tri par sélection Complexité de ll’algorithme algorithme Sous fonction: TriFusion ¾ Tri du tableau T entre inf et sup Idée: ComplexInterClass (N ) ¾ Complexité du pire cas ¾ Traitement d’un niveau en O(N) ¾ Log(N) g( ) niveaux différents C ( N ) = ComplexInterCl C ( N ) = Ο( N log( N ) ) TRI: TriFusion(1,N) TriFusion (Inf, Sup): mil = (inf + sup) div 2 TriFusion(inf mil) TriFusion(inf, TriFusion(mil+1, sup) Interclasser(T, inf, mil, sup) 37 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation 38 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Comparaison de deux algorithmes de tri Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par segmentation (Quick sort) Idée : ¾ Choisir un élément du tableau : pivot Tri T i par sélection: él i ¾ Lors du parcours de k éléments pour recherche du minimum, on ne mémorise que le minimum alors que k comparaisons ont étés effectuées ¾ Ordonner les éléments du tableau par rapport au pivot ¾ Appeler récursivement le tri sur les sous tableaux à gauche et à droite du pivot Tri par fusion: ¾ Toutes les comparaisons sont mémorisées en ordonnant les éléments comparés Pivot 1 N < Pivot 39 > Pivot 40 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par segmentation (Quick sort) Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par segmentation (Quick sort) TriSegmentation (inf, sup: entiers dans [1..N]): TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup P = ChoixPivot(T, inf, sup) i = inf s = sup répéter tantque Tj < p i++ tantque Ts < p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s répéter tantque Ti < p i++ tantque Ts < p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) i P=3 s 5 8 3 4 6 41 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par segmentation (Quick sort) Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par segmentation (Quick sort) TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup 42 TriSegmentation (inf, sup: entiers dans [1..N]): i P=3 P = ChoixPivot(T, inf, sup) i = inf s = sup s 5 8 3 4 6 répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) 43 i P=3 s 5 8 3 4 6 i P=3 s 5 8 3 4 6 44 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par segmentation (Quick sort) Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par segmentation (Quick sort) TriSegmentation (inf, sup: entiers dans [1..N]): TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup i P=3 P = ChoixPivot(T, inf, sup) i = inf s = sup s 5 8 3 4 6 répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s i P=3 répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s s 5 8 3 4 6 i P=3 i P=3 s 5 8 3 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) s 3 8 5 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) 45 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par segmentation (Quick sort) répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par segmentation (Quick sort) TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup 46 TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup P=3 is répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s 3 8 5 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) P=3 is 3 8 5 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) 47 48 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par segmentation (Quick sort) Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par segmentation (Quick sort) TriSegmentation (inf, sup: entiers dans [1..N]): TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup P = ChoixPivot(T, inf, sup) i = inf s = sup P=3 s i répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s P=3 s i répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s 3 8 5 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) 3 8 5 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) 49 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Algorithme de Tri par segmentation (Quick sort) répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s Tri par fusion Tri par segmentation Tri par sélection Algorithme de Tri par segmentation (Quick sort) TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup 50 TriSegmentation (inf, sup: entiers dans [1..N]): P = ChoixPivot(T, inf, sup) i = inf s = sup P=3 s i répéter tantque Ti < p i++ tantque Ts > p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s 3 8 5 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) P=3 s i 3 8 5 4 6 si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) 51 52 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Invariant de boucle Tri par fusion Tri par segmentation Tri par sélection Complexité TriSegmentation (inf, sup: entiers dans [1..N]): ComplexInterClass (N ) Algorithme Al ih lle plus l efficace ffi pour d des d données é réparties é i P = ChoixPivot(T, inf, sup) i = inf s = sup aléatoirement { répéter inf tantque Tj < p i++ tantque Ts < p s-si i ≤ s alors Echanger(Ti, Ts) i++ s-j jusqu’à ’à i > s ≤ k < i ⇒ Tk ≤ p et s < k ≤ sup ⇒ Tk ≥ p} Complexité moyenne C ( N ) = ComplexInterCl C ( N ) = Ο( N log( N ) ) Complexité du pire cas: O(N²) Problème : choix d’un bon pivot si s > inf alors TriSegmentation(inf, s) si i < sup alors TriSegmentation(i, sup) 53 Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs 54 Tri par fusion Tri par segmentation Introduction aux algorithmes de tri Les tris séquentiels Les tris récursifs Tri par sélection Conclusion Tri par fusion Tri par segmentation Références Site Nombreux autres algorithmes de tri: tri par tas, tri de shell… ¾ http://deptinfo.cnam.fr/Enseignement/CycleA/SD/demonstration/Tri.html Les meilleurs algorithmes de tris sont en: O(N.log O(N log N) Livres ¾ N.Wirth (Algorithmes et structures de données, Prentice Hall 86 ou Eyrolles Choisir un algorithme g de tri différents selon la taille de 87) l'ensemble à ordonner ¾ R.Sedgewick (Algorithmes en langage C, Addison-Wesley 90 ou InterEditions 91) ¾ D.E.Kunth (The art of the computer programming, Vol.3, Addison-Wesley Addison Wesley 74) 55 56