SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
sommaire
                                                                           • Introduction
                                                                           • Tri par sélection
                                                                           • Tri à bulle
                 Algorithmes de TRI                                        • Tri par insertion
                                    © L. B. Romdhane, Ph.D.                • Tri par fusion
                                    DSI/FSM/ UM/ Tunisie                   • Tri rapide
                                                                           • Comparaison




                                                                                                       L. B. RoradLaric; FSM.TN




NTRODUCTION (1)
• Problématique - Etant donnée une séquence
  d'objets (un vecteur), ordonner les éléments de cette
  séquence en ordre croissant; ou décroissant                              Tri par Sélection
• Pour résoudre ce problème, nous avons besoin                             Sélection Sort
  • d'une séquence d'éléments
    • tous les éléments sont du même type
    • aucune restriction sur la taille de cette séquence
    • sans perte de généralités, on supposera que le vecteur est un
      tableau
  • une fonction de comparaison
    • étant donné deux éléments; elle détermine celui plus petit
      (plus grand)
    • permet de définir une relation d'ordre sur les élément

                         1,. 1). KmniHiunc; FSM.TN                    L3   ASD              O L. B. Roradhane; FSM.TN
RI PAR SELECTION (1)                                                TRfPAR
      Trouver le rang du plus petit élément du tableau V
       • trouver m tel que V[i] > V[m] ; Vi
      Echanger l'élément V[m] avec V[i]                                           1=1 ! 2    î      1
                                                                                                             JL
      Reprendre le même processus; mais en considérant                           i=2     O
                                                                                                             .5 L                ! .?_.   -1
      uniquement la séquence des éléments V[2J, ..., V[n]                                                  ! 5                      9      4
      Lorsqu'on atteint une séquence constituée d'un seul                        1=4     o          i
                                                                                                                    -i-â-1 §L.i
                                                                                                                         T    I
      élément on s'arrête !                                                              o          i           2

       • une séquence d'un seul élément est par définition triée !                       o                      2           4




ASD                        S) L. B. Romdhane; FSM.TN             L5                              C L. B. Romdhane; FSM.TN                      L6




      RI PAR SELECTION (3)                                                     PAR SELECTION (4)
                                                                      i
procédure triSelection (V: Tableau[n] d'entier)                       1   ' Théorème - L'algorithme de tri par sélection admet
    VAR i, k, ind_min, aux : entier                                         une complexité de O(n2)
 Début
                                                                            Autre variante
       Pour i de i à n-i faire
                                                                             • Trouver m, le rang du plus grand élément du tableau V
         ind_min<— i
         Pour k de i+i à n faire                                             • Echanger V[m] avec V[n]
           si (V[k] < V[ind_min]) alors ind_min *- k                         • Reprendre le même processus; mais en considérant
            Fin Si                                                             uniquement la séquence des éléments V[i], ..., V[n-i]
         Fin Pour
                                                                             • Jusqu'à atteindre une séquence d'un seul élémeet
         aux <~- V]iJ, V{iJ <- Vjind_minJ^ Vjind_minJ <— aux
       Fin Pour



                                 <E> L. B. Romdbanc; FSM-TN                                             O UB. Romdhane ;¥SM.TN
RI A BULLE (1)
                                                                                                   • Parcourir le tableau et comparer deux éléments
                                                                                                     consécutifs en les échangeant s'ils ne sont pas dans le
Tri à Bulle                                                                                          bon ordre
 Bubble Sort                                                                                        • Ainsi, à la fin du parcours, on trouvera le plus grand
                                                                                                      élément à la fin du tableau
                                                                                                    • Reprendre le même processus avec la séquence V[o],

                                      <4                                                              V[i],...,V[n-i]
                                                                                                    • On s'arrête lorsqu'on atteint une séquence contenant
                                                                                                      un seul élément



ASD                © L. B. Romdhane; FSM.TN                                                   L9   ASD                        © L. B. Romdhanc; FSM.TN         L10




      RI A BULLE (2)                                                                                 'RI A BULLE (3)
                                                                                                   procédure triBulle (V: Tableau[n] d'entier)
parcours nurn. i                                parcours nuni. 2                                          VAR permut : booléen; k, aux, p : entier

V = [z; i; i; 5; o; 9; 4]                       V= U;i; i; 5; 059; 4]                               Début
                                                     prT.pTTfT^^'v'ii — •^•-T-— ---                      permut<— Vrai, p <— n-i
                                                 ,                   i'                                  TantQue (permut) Faire
                                                 =      o       i.        o ! 5 1 4 î 9
                                                                      1 ----- *._rl._4.--!-_<—;_
                                                                                                           permut <— Faux
                                                                                                           Pour i de i à p faire
                                                i=3! i         o          2    4      5      9                Si (V[i]>V[i+i]) alors
lrl|.^_.-..f.-.f      . .                                                                                        aux^- V[i],V[i]^- V[i+i],V[i+i] «- aux
                                                                                                                 permut <— Vrai
i=5Î * ,. ° I 2 L_l_l_5__l--9_.                                                                               Fin Si
                                                                                                           Fin Pour
                                                                                                           p<-p-i
                                                                                                       Fin TantQue
                                                                                                    Fin.
ASD                 0 L. B. Roradhane; FSM.TN                                                 LU   ASD                        e L. B. Romdhanc; FSM.TN         L12
RI PAR INSERTION (1)
                                                                                     Supposons que nous avons réussi à trier les k premiers
                                                                                     éléments de la séquence
Tri par Insertion
Insertion Sort
                                                                                             séquence triée                    séquence non encore triée


                                                                                   • Ainsi, on augmente la taille de la séquence triée en lui
                                                                                     ajoutant le premier élément de la séquence non triée;
                                                                                     mais en l'insérant directement dans sa bonne place

                                                                                                                                   séquence non encore triée
                                                                                                                                   t
ASD                    €> L. B. Romdhane; FSM.TN                                                               © L. B. Romdhane; FSM.TN




      RI PAR INSERTION (2)                                                           RI PAR INSERTION (3)
                                                                                   procédure trilnsertion (V: Tableau[n] d'entier)
                                                                                           VAR permut : booléen; k, aux, p : entier
       insérer 6                                                insérer 1          Début
                                                                                         Pour i de i à (n-i) faire
                   6 4
                                                                                           jf-i
       insérer 4                                                insérer 5                  TantQue ((V[j] > x) ET (j>o)) faire

                   4   6 9     1     5    2
                                                                                           Fin TantQue
       insérer 9                                                insérer 2                          x
                                                                                       Fin Pour
                   4 6 9       I     5    2                                        Fin.

ASD                                (D L. B. Koiudhane; KSM.TN               1,15   ASD                         » L. B. Romdbanc; FSM.TN
TRI PAR FUSION (1)                              •      f


Tri Par Fusion                                            Le principe du tri par fusion d'une scqueiu <• N
Merge Sort                                                d'éléments est résumé comme su il
                                                          • Si 5est vide ou contient un seul élément; elle est
                                                            définition triée; donc on retourne S
                                                          • sinon
                                                            i.     On divise S en deux séquences Si & Sz approximativement
                                                                   de même taille (11/2)
                                                           ^.     Récursivement; on effectue le tri de Si et le tri de Sz
                                                           3.     On fusionne Si & Sz, en une seule séquence triée




                                                    ASD




             FUSION (.')
                                                          :l PAR FUSIOlvTfS)
                >     f
                      di , ,
                               '.    •'   J    '•
                                             II




                                                                         appel récursif

                                                                                          diviser


                                                                                                         I 12 j   Séquences d'un élément :
                                                                 appel récursif                           = '     plus d'appels récursifs p
                                                                                      appel récumf        ^       -'" *'**?' «*"«•* Pour
                                                                                                                  cette branche de l'arbre
              O L. B. Rondhcinc; KSM.TN
TRTPAR                                                                                                                                     FUSION (5)

                                                                                                                                                    12    9     6     20        3   15


                                                                                                                                                                                         I 20 |
                                                                                               6 !
                                                                                          ,.     !
                                                                                                                                   appel récursif
             appel récursif                                              appel récursif

                 12       9          diviser       9

                                                                                                                              9   i 12
                                                                                                                                           fusion
                      fusion




                              © L. B. Romdhmic; KSM.TN                                                 L21         ASD                               > L. B. Romdhane; FSM.TN




              Fusior(6)                                                                                                 RI PAR FUSION (7)
                                                                                                                    Fonction triFusion (V: Vecteur) : Vecteur
                                                                                                                           VAR Vi, V2 : Vecteur
                                                                                                                    Début
                                                                                                                         Si (taille(V) = o) ou (taille(V) = i)) alors
                                                                                                                           retourner (V)
                               y     6     20     •}       15                                                            Sinon
                                                 6 I 9 j 12 |                                       fusion   [ 3 f 15 f 20 !
                                                                                                                           Diviser(V, Vi, Vz)
                                                                                                                           Vi<— triFusion(Vi)
       L.M«—J-......1...«_J                      L_.~..._A.~_...^L_a._.b.l
                                                                                                                           Va<— triFusion(V2)
                                                                                                                           V<- fusion (Vi, Vz)
                                                                                                                           Retourner (V)
                                                                                                                       FinSi
                                                                                                                    Fin.

ASl)                          » L. B. Romdhanc; FSM.TN                                                 L23         ASD                               © L. B. Romdhane; FSM.TN              L24
TRI PAR FUSION (8)                                                                                                           FUSION (9)
• I ,a méthode diviser permet de diviser un vecteur de dimension n, en                                            La méthode fusionner permet la fusion de deux
  deux vecteurs de dimension (0/2)
Procédure Diviser (In V, InOut Vi, InOut Vz : Vecteur) : Vecteur                                                  séquences triées en une seule triée !
         VAR k,m : entier
         e : élément
Début                                                                                           ___
   m <- taille (V) DIV 2 + taille(V) MOD 2                                           sa                                                                    3
  Vi <— créerQ, Va <— créerQ,
   Pour k de i à m faire                                                                                                                                   3      6
         e<— savoir_elem(k, v)
         Vi <— insérer(e, k, Vi)                                                                                                                           3      6   9
       Fin Pour
       Pour k de m+i à taille(V) faire                                                                                                                     3      6   9   12

         e*— savoir_elem(k, v)
         Va <— insérer(e, k-m, Vi)
       Fin Pour                                                                                                                                                       9   12   15   20
Fin.

                                           > L. B. Romdhanc; FSM.TN                                   L25   ASD                        • L. B. Romdhaue; FSM.TN




TRI PAR FUSION (10)
Procédure fusionner(Vi, Vz :                                     TantQue (i <= n) faire
  Vecteur) : Vecteur                                                 c<— savoir_elem(i, vi)
                                                                     V <-• insc4rer(e, k, V)
VAR i, j, k, m, n : entier
   V : Vecteur
    ei, e2, e : élément
                                                                     k <• k ii
                                                                     i «- i n
                                                                                                            Tri Rapide
                                                                 l'in Tjiil ()ne
Début                                                                                                        Quick Sort
   m <- taille (Vi), n «- taille (Va), k <-                      TantQue (j <= m) faire
       i                                                              e^- savoir_cleni(j, vi)
   V <— créerQ, i <— i, j <— i                                        V (- insérur(e, k, V)
   TantQue ((i <= n) ET (j <= m)) faire                               k <-- k n
       ei<— savoirmelem(i, vi), ez <—                                 j«-i+i
              savoir_elera(j, vz)                               Fin Tant Que
          Si (ei < es) alors e *— ei, i <— î +j
          sinon e «- ez, j 4- j+i                           retourner (V)
          Fin Si
          V <— insérer(e, k, V)                             Fin.
          k «— k +1
       Fin Tant Que
Fin.


ASD                             0 L. B. Romdhanc; FSM.TN                                                    ASD               © L. B. Romdhanc; FSM.TN                                   L28
. H P e
                                                                                       P S ^         -J^f~.      ,V.T^=^^^^_




TRI RAPIDE (1)                                                                   JTRT=RAPIDE                              (2)
• I ,c principe du tri rapide d'une séquence S d'éléments est                                                                                  pivot
  résumé comme suit
   • Si S est vide ou contient un seul élément; elle est par
      définition triée, donc retourner S                                                 partitionnement
   • sinon
      1.   On choisit (aléatoirement) un élément de S comme étant le pivot
      2.   On divise S en trois séquences Si, 82, & Sj de la manière suivante
            • Si contient tous les éléments inférieurs au pivot
                                                                                          appel récursif
            • Sz contient tous les éléments égaux au pivot
            • £3 contient tous les éléments supérieurs au pivot
      3.   Récursivement; trier Si & 83                                                          3      Séquence d'un élément : plus d'appels
      4.   Concaténer dans cet ordre : Si, S2 & £3                                                      récursifs pour cette branche de l'arbre


ASD                        6 L. B. Romdhanc; FSM.TN                         L                                          O L. B. Roiudhanc; FSM.TN        L30




                                                                                r^v^i^^^^;^^^^                - •• =--"=

                                                                                ^TftTRAPIDE (4)
                                                  pivot

                          12    9            20       3   15




                          partitionnement


ASD                            !.. B. Romdhanc; FSM.TN                             ASD                                         L. B. Romdhanc; FSM.TN
TRI RAPIDE (5)
                           12       9    20     15


                                                                                                                         12      9     6     20     3    15




      c
                                                       appel récui'sif           j   j
          appel récursif

                                                                                                     LU

                                                                         12SLJ
                                                      concaténation                                                                                           concaténation




ASD                         © L. B. Ron>dh:iiic; KSM.'I'N                                                                  © L. B. Romdhane; FSM.TN




TRTRÂPIDE (7)                                                                                    RI RAPIDE (8)
                                                                                               fonction triRapide (V: Vecteur) : Vecteur
                                                                                                       VAR Vi, Vz, V3 : Vecteur
                                                                                                       m : élément
                                                                                               Début                                                                   ££
                                                                                                     Si (taille(V) - o) ou (taille(V) = i)) alors
                                                                                                       retourner (V)
                                                                                                     Sinon
                                                                                                       m <— choisirPivot(V)
                                                                                                       DiviserPivot(V, m Vi, Vz, V3) • • |
                                                                                                       Vi<- triRapide(Vi)
                                   concaténation                                                       V3^- triRapide(V3)
                                                                                                       V<- concat(Vi, V2> V3)
                                                                                                       Retourner (V)
                                                                                                     FinSi
                                                                                               Fin.

ASD                             © L. B. Romdhane; FSM.TN                                 L)S   ASD                            © L. B. Romdhane; FSM.TN                        L36
TRI RAPIDE (9)                                                                                                           ,omparaison
Division                                                          Concaténation
jimi-i'ilure DiviserPivot (V: Vecteur, pivot :
    rlrmi-nt; InOut Vi, Vî, Vj : Vecteur)
                                                                  fonction Concat (Vi, Vz, V% : Vecteur) :
                                                                      Vecteur
                                                                                                                                                                               |j|lï|ffliij>Iexité nioyentianj
            VAK i, j, k. 1 : entier                               VAR i, j : entier
                X : élément                                                  V : Vecteur
Début                                                             Début                                                 Sélection                  0(n*)                       O(n2)
        Pour i de i à taiile(V) faire
           x <— savoir dem(V, i)
                                                                         Pour i de i à taille(Vi) faire
                                                                            x <_ savoir elem(Vt i)
                                                                                                                        Bulle                      0(n*)                       O(n2)
           si (x < pivot) alors                                             i<-i«, V<- insérer(x, j, V)
                vr^LérerKk.v.)                                           «n Pour _
                                                                                                                        Insertion                  O(n*)                       0(n>)
            «non si (x > pivot) alors                                     P°ur ' ^ 'a taille(V2) faire
                         )^_ j + t
                         V3 <- insérer(x, 1, V 3 )
                                                                            x <- savoir_elem{Vz, i)
                                                                             )<- i«. v <~ insérer(«, j, V)
                                                                                                                        Fusion                     O(n log(n))                 0(nlog(n)r
                smon                                                     Fin Pour                                             * divide & conquer
                         j<-j«                                           Pour i de i à taillc(V3) faire


            F'nS'
                  Fi"s'                                                  j< - J F - I , V<~ insércr(x,j, V)
                                                                      Fin Pour
                                                                                                                        Rapide                     OM                           O(n log(n))
        FinPour                                                   retourner (V)                                               ' divide & conquer
Fln -                                                             Fin.


ASD                                   0 L. B. Roradhane; FSM.TN                                               '   L37   ASD                         C L. B. Romdbanc; FSM.TN                               L 38

Contenu connexe

En vedette

Ch3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes RécursivesCh3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes Récursiveslotfibenromdhane
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsNewCircle Training
 
Ch7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-CopmlétudeCh7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-Copmlétudelotfibenromdhane
 
Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete  Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete Adnan abid
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJosé Paumard
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
 
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautésAlphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautésAlphorm
 
Alphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server FacesAlphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server FacesAlphorm
 
Alphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certificationAlphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certificationAlphorm
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm
 

En vedette (15)

Cats
CatsCats
Cats
 
Ch3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes RécursivesCh3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes Récursives
 
Functional programming in java
Functional programming in javaFunctional programming in java
Functional programming in java
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
 
Notifications
NotificationsNotifications
Notifications
 
Ch7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-CopmlétudeCh7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-Copmlétude
 
Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete  Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne Tour
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautésAlphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautés
 
Alphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server FacesAlphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server Faces
 
Alphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certificationAlphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certification
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautés
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux
 

Ch5 Algorthmique Avancée - Algorithme de Tri

  • 1. sommaire • Introduction • Tri par sélection • Tri à bulle Algorithmes de TRI • Tri par insertion © L. B. Romdhane, Ph.D. • Tri par fusion DSI/FSM/ UM/ Tunisie • Tri rapide • Comparaison L. B. RoradLaric; FSM.TN NTRODUCTION (1) • Problématique - Etant donnée une séquence d'objets (un vecteur), ordonner les éléments de cette séquence en ordre croissant; ou décroissant Tri par Sélection • Pour résoudre ce problème, nous avons besoin Sélection Sort • d'une séquence d'éléments • tous les éléments sont du même type • aucune restriction sur la taille de cette séquence • sans perte de généralités, on supposera que le vecteur est un tableau • une fonction de comparaison • étant donné deux éléments; elle détermine celui plus petit (plus grand) • permet de définir une relation d'ordre sur les élément 1,. 1). KmniHiunc; FSM.TN L3 ASD O L. B. Roradhane; FSM.TN
  • 2. RI PAR SELECTION (1) TRfPAR Trouver le rang du plus petit élément du tableau V • trouver m tel que V[i] > V[m] ; Vi Echanger l'élément V[m] avec V[i] 1=1 ! 2 î 1 JL Reprendre le même processus; mais en considérant i=2 O .5 L ! .?_. -1 uniquement la séquence des éléments V[2J, ..., V[n] ! 5 9 4 Lorsqu'on atteint une séquence constituée d'un seul 1=4 o i -i-â-1 §L.i T I élément on s'arrête ! o i 2 • une séquence d'un seul élément est par définition triée ! o 2 4 ASD S) L. B. Romdhane; FSM.TN L5 C L. B. Romdhane; FSM.TN L6 RI PAR SELECTION (3) PAR SELECTION (4) i procédure triSelection (V: Tableau[n] d'entier) 1 ' Théorème - L'algorithme de tri par sélection admet VAR i, k, ind_min, aux : entier une complexité de O(n2) Début Autre variante Pour i de i à n-i faire • Trouver m, le rang du plus grand élément du tableau V ind_min<— i Pour k de i+i à n faire • Echanger V[m] avec V[n] si (V[k] < V[ind_min]) alors ind_min *- k • Reprendre le même processus; mais en considérant Fin Si uniquement la séquence des éléments V[i], ..., V[n-i] Fin Pour • Jusqu'à atteindre une séquence d'un seul élémeet aux <~- V]iJ, V{iJ <- Vjind_minJ^ Vjind_minJ <— aux Fin Pour <E> L. B. Romdbanc; FSM-TN O UB. Romdhane ;¥SM.TN
  • 3. RI A BULLE (1) • Parcourir le tableau et comparer deux éléments consécutifs en les échangeant s'ils ne sont pas dans le Tri à Bulle bon ordre Bubble Sort • Ainsi, à la fin du parcours, on trouvera le plus grand élément à la fin du tableau • Reprendre le même processus avec la séquence V[o], <4 V[i],...,V[n-i] • On s'arrête lorsqu'on atteint une séquence contenant un seul élément ASD © L. B. Romdhane; FSM.TN L9 ASD © L. B. Romdhanc; FSM.TN L10 RI A BULLE (2) 'RI A BULLE (3) procédure triBulle (V: Tableau[n] d'entier) parcours nurn. i parcours nuni. 2 VAR permut : booléen; k, aux, p : entier V = [z; i; i; 5; o; 9; 4] V= U;i; i; 5; 059; 4] Début prT.pTTfT^^'v'ii — •^•-T-— --- permut<— Vrai, p <— n-i , i' TantQue (permut) Faire = o i. o ! 5 1 4 î 9 1 ----- *._rl._4.--!-_<—;_ permut <— Faux Pour i de i à p faire i=3! i o 2 4 5 9 Si (V[i]>V[i+i]) alors lrl|.^_.-..f.-.f . . aux^- V[i],V[i]^- V[i+i],V[i+i] «- aux permut <— Vrai i=5Î * ,. ° I 2 L_l_l_5__l--9_. Fin Si Fin Pour p<-p-i Fin TantQue Fin. ASD 0 L. B. Roradhane; FSM.TN LU ASD e L. B. Romdhanc; FSM.TN L12
  • 4. RI PAR INSERTION (1) Supposons que nous avons réussi à trier les k premiers éléments de la séquence Tri par Insertion Insertion Sort séquence triée séquence non encore triée • Ainsi, on augmente la taille de la séquence triée en lui ajoutant le premier élément de la séquence non triée; mais en l'insérant directement dans sa bonne place séquence non encore triée t ASD €> L. B. Romdhane; FSM.TN © L. B. Romdhane; FSM.TN RI PAR INSERTION (2) RI PAR INSERTION (3) procédure trilnsertion (V: Tableau[n] d'entier) VAR permut : booléen; k, aux, p : entier insérer 6 insérer 1 Début Pour i de i à (n-i) faire 6 4 jf-i insérer 4 insérer 5 TantQue ((V[j] > x) ET (j>o)) faire 4 6 9 1 5 2 Fin TantQue insérer 9 insérer 2 x Fin Pour 4 6 9 I 5 2 Fin. ASD (D L. B. Koiudhane; KSM.TN 1,15 ASD » L. B. Romdbanc; FSM.TN
  • 5. TRI PAR FUSION (1) • f Tri Par Fusion Le principe du tri par fusion d'une scqueiu <• N Merge Sort d'éléments est résumé comme su il • Si 5est vide ou contient un seul élément; elle est définition triée; donc on retourne S • sinon i. On divise S en deux séquences Si & Sz approximativement de même taille (11/2) ^. Récursivement; on effectue le tri de Si et le tri de Sz 3. On fusionne Si & Sz, en une seule séquence triée ASD FUSION (.') :l PAR FUSIOlvTfS) > f di , , '. •' J '• II appel récursif diviser I 12 j Séquences d'un élément : appel récursif = ' plus d'appels récursifs p appel récumf ^ -'" *'**?' «*"«•* Pour cette branche de l'arbre O L. B. Rondhcinc; KSM.TN
  • 6. TRTPAR FUSION (5) 12 9 6 20 3 15 I 20 | 6 ! ,. ! appel récursif appel récursif appel récursif 12 9 diviser 9 9 i 12 fusion fusion © L. B. Romdhmic; KSM.TN L21 ASD > L. B. Romdhane; FSM.TN Fusior(6) RI PAR FUSION (7) Fonction triFusion (V: Vecteur) : Vecteur VAR Vi, V2 : Vecteur Début Si (taille(V) = o) ou (taille(V) = i)) alors retourner (V) y 6 20 •} 15 Sinon 6 I 9 j 12 | fusion [ 3 f 15 f 20 ! Diviser(V, Vi, Vz) Vi<— triFusion(Vi) L.M«—J-......1...«_J L_.~..._A.~_...^L_a._.b.l Va<— triFusion(V2) V<- fusion (Vi, Vz) Retourner (V) FinSi Fin. ASl) » L. B. Romdhanc; FSM.TN L23 ASD © L. B. Romdhane; FSM.TN L24
  • 7. TRI PAR FUSION (8) FUSION (9) • I ,a méthode diviser permet de diviser un vecteur de dimension n, en La méthode fusionner permet la fusion de deux deux vecteurs de dimension (0/2) Procédure Diviser (In V, InOut Vi, InOut Vz : Vecteur) : Vecteur séquences triées en une seule triée ! VAR k,m : entier e : élément Début ___ m <- taille (V) DIV 2 + taille(V) MOD 2 sa 3 Vi <— créerQ, Va <— créerQ, Pour k de i à m faire 3 6 e<— savoir_elem(k, v) Vi <— insérer(e, k, Vi) 3 6 9 Fin Pour Pour k de m+i à taille(V) faire 3 6 9 12 e*— savoir_elem(k, v) Va <— insérer(e, k-m, Vi) Fin Pour 9 12 15 20 Fin. > L. B. Romdhanc; FSM.TN L25 ASD • L. B. Romdhaue; FSM.TN TRI PAR FUSION (10) Procédure fusionner(Vi, Vz : TantQue (i <= n) faire Vecteur) : Vecteur c<— savoir_elem(i, vi) V <-• insc4rer(e, k, V) VAR i, j, k, m, n : entier V : Vecteur ei, e2, e : élément k <• k ii i «- i n Tri Rapide l'in Tjiil ()ne Début Quick Sort m <- taille (Vi), n «- taille (Va), k <- TantQue (j <= m) faire i e^- savoir_cleni(j, vi) V <— créerQ, i <— i, j <— i V (- insérur(e, k, V) TantQue ((i <= n) ET (j <= m)) faire k <-- k n ei<— savoirmelem(i, vi), ez <— j«-i+i savoir_elera(j, vz) Fin Tant Que Si (ei < es) alors e *— ei, i <— î +j sinon e «- ez, j 4- j+i retourner (V) Fin Si V <— insérer(e, k, V) Fin. k «— k +1 Fin Tant Que Fin. ASD 0 L. B. Romdhanc; FSM.TN ASD © L. B. Romdhanc; FSM.TN L28
  • 8. . H P e P S ^ -J^f~. ,V.T^=^^^^_ TRI RAPIDE (1) JTRT=RAPIDE (2) • I ,c principe du tri rapide d'une séquence S d'éléments est pivot résumé comme suit • Si S est vide ou contient un seul élément; elle est par définition triée, donc retourner S partitionnement • sinon 1. On choisit (aléatoirement) un élément de S comme étant le pivot 2. On divise S en trois séquences Si, 82, & Sj de la manière suivante • Si contient tous les éléments inférieurs au pivot appel récursif • Sz contient tous les éléments égaux au pivot • £3 contient tous les éléments supérieurs au pivot 3. Récursivement; trier Si & 83 3 Séquence d'un élément : plus d'appels 4. Concaténer dans cet ordre : Si, S2 & £3 récursifs pour cette branche de l'arbre ASD 6 L. B. Romdhanc; FSM.TN L O L. B. Roiudhanc; FSM.TN L30 r^v^i^^^^;^^^^ - •• =--"= ^TftTRAPIDE (4) pivot 12 9 20 3 15 partitionnement ASD !.. B. Romdhanc; FSM.TN ASD L. B. Romdhanc; FSM.TN
  • 9. TRI RAPIDE (5) 12 9 20 15 12 9 6 20 3 15 c appel récui'sif j j appel récursif LU 12SLJ concaténation concaténation ASD © L. B. Ron>dh:iiic; KSM.'I'N © L. B. Romdhane; FSM.TN TRTRÂPIDE (7) RI RAPIDE (8) fonction triRapide (V: Vecteur) : Vecteur VAR Vi, Vz, V3 : Vecteur m : élément Début ££ Si (taille(V) - o) ou (taille(V) = i)) alors retourner (V) Sinon m <— choisirPivot(V) DiviserPivot(V, m Vi, Vz, V3) • • | Vi<- triRapide(Vi) concaténation V3^- triRapide(V3) V<- concat(Vi, V2> V3) Retourner (V) FinSi Fin. ASD © L. B. Romdhane; FSM.TN L)S ASD © L. B. Romdhane; FSM.TN L36
  • 10. TRI RAPIDE (9) ,omparaison Division Concaténation jimi-i'ilure DiviserPivot (V: Vecteur, pivot : rlrmi-nt; InOut Vi, Vî, Vj : Vecteur) fonction Concat (Vi, Vz, V% : Vecteur) : Vecteur |j|lï|ffliij>Iexité nioyentianj VAK i, j, k. 1 : entier VAR i, j : entier X : élément V : Vecteur Début Début Sélection 0(n*) O(n2) Pour i de i à taiile(V) faire x <— savoir dem(V, i) Pour i de i à taille(Vi) faire x <_ savoir elem(Vt i) Bulle 0(n*) O(n2) si (x < pivot) alors i<-i«, V<- insérer(x, j, V) vr^LérerKk.v.) «n Pour _ Insertion O(n*) 0(n>) «non si (x > pivot) alors P°ur ' ^ 'a taille(V2) faire )^_ j + t V3 <- insérer(x, 1, V 3 ) x <- savoir_elem{Vz, i) )<- i«. v <~ insérer(«, j, V) Fusion O(n log(n)) 0(nlog(n)r smon Fin Pour * divide & conquer j<-j« Pour i de i à taillc(V3) faire F'nS' Fi"s' j< - J F - I , V<~ insércr(x,j, V) Fin Pour Rapide OM O(n log(n)) FinPour retourner (V) ' divide & conquer Fln - Fin. ASD 0 L. B. Roradhane; FSM.TN ' L37 ASD C L. B. Romdbanc; FSM.TN L 38