Méthodes de tri

36
Méthodes de tri

Transcript of Méthodes de tri

Page 1: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 1/36

Méthodes de tri

Page 2: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 2/36

Benoît Charroux - Tris - Septembre 98 - 2

Les méthodes de tri

Les méthodes de tri permettent le réarrangement de données.

Par exemple, le fichier :

Philippe 21

Jean 33

Lineda 27

 peut être trié par nom :

Jean 33

Lineda 27

Philippe 21

ou trié par âge :Philippe 21

Lineda 27

Jean 33

Page 3: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 3/36

Benoît Charroux - Tris - Septembre 98 - 3

Les méthodes de tri

Pour pouvoir comparer les méthodes de tris, on les appliquent à des tableaux d’entiers.

20 6 1 3 1 7

0 1 2 3 4 5Indices :

1 1 3 6 7 20

0 1 2 3 4 5Indices :

Tableau non trié :

Tableau trié :

3URFpGXUHtri( t: tab en entrée sortie )

$OJRULWKPH

'pEXW

...

)LQ

&RQVWDQWH N 3URJUDPPHGHWUL

$OJRULWKPH

'pEXW

7\SH tab = WDEOHDX[ N ]: HQWLHU

9DULDEOH t: tab

tri( t )

)LQ

Page 4: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 4/36

Benoît Charroux - Tris - Septembre 98 - 4

Tri par sélectionMéthode :

on cherche l’élément de plus petite valeur pour l’échanger avec l’élément en première position ;

 puis on cherche l’élément ayant la deuxième plus petite valeur pour l’échanger avec l’élément en deuxième position ;

et ainsi de suite.

20 6 1 3 1 7

1 6 20 3 1 7

1 1 20 3 6 7

1 1 3 20 6 7

1 1 3 6 20 7

1 1 3 6 7 20

Il faut :

• 1 boucle pour parcourir le tableau et sélectionner tous les éléments ;

• 1 boucle pour rechercher le minimum parmi les éléments non triés.

Page 5: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 5/36

Benoît Charroux - Tris - Septembre 98 - 5

Algorithme du tri par sélection

3URFpGXUHtriSélection( t: tab en entrée sortie )$OJRULWKPH

'pEXW

9DULDEOHV i, j, min, tmp : HQWLHU

3RXU i GH 0 j N-2 UpSpWHU /* sélection d’un élément */

min <- i

3RXU j GH i+1 j N-1 UpSpWHU /* recherche du minimum */

6L t[ j ] < t[ min ] DORUV

min <- j

)LQVL)LQSRXU

tmp <- t[ i ] /* échange */

t[ i ] <- t[ min ]

t[ min ] <- tmp

)LQSRXU

)LQ

Page 6: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 6/36

Benoît Charroux - Tris - Septembre 98 - 6

Tri par insertionMéthode :

on considère les éléments les uns après les autres en insérant chacun à sa place parmi les éléments déjà triés.

20 6 1 3 1 7

6 20 1 3 1 7

1 6 20 3 1 7

1 3 6 20 1 7

1 1 3 6 20 7

1 1 3 6 7 20

Il faut :• 1 boucle pour parcourir le tableau et sélectionner l’élément à insérer ;

• 1 boucle pour décaler les éléments plus grands que l’élément à insérer ;

• insérer l’élément.

Page 7: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 7/36

Benoît Charroux - Tris - Septembre 98 - 7

Algorithme du tri par insertion

3URFpGXUHtriInsertion( t: tab en entrée sortie )

$OJRULWKPH

'pEXW

9DULDEOHV i, j, mem: HQWLHU

3RXU i GH 1 j N-1 UpSpWHU /* sélection de l’élément à insérer*/

mem <- t[ i ]

 j <- i

7DQWTXH j>0 HW t[j-1]>mem UpSpWHU/* décalage des éléments plus grands */

t[ j ] <- t[ j-1 ] j <- j - 1

)LQWDQWTXH

t[ j ] <- mem /* insertion */

)LQSRXU

)LQ

Page 8: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 8/36

Benoît Charroux - Tris - Septembre 98 - 8

Amélioration du tri par insertion3URFpGXUHtriInsertion( t: tab en entrée sortie )

$OJRULWKPH

'pEXW

...7DQWTXH j>0 HW ... 5pSpWHU

...

 j <- j - 1

)LQWDQWTXH

...

)LQ

Le test j>0 qui évite les dépassements à

gauche du tableau est presque toujours vrai !

Placer une « sentinelle » : élément inférieur ou égale au minimum du tableau

20 6 1 3 1 7-1

Page 9: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 9/36

Benoît Charroux - Tris - Septembre 98 - 9

Tri à bulles

Méthode :

on parcours autant de fois le tableau en permutant 2 éléments adjacents mal classés

qu’il le faut pour que le tableau soit trié.

20 6 6 6 6 66 20 1 1 1 1

1 1 20 3 3 3

3 3 3 20 1 1

1 1 1 1 20 77 7 7 7 7 20

Il faut :• 1 boucle pour parcourir tout le tableau et sélectionner les éléments un à un ;

• 1 boucle pour permuter les éléments adjacents.

Tableau

 prit

dans ce

sens

1 1 1 16 3 3 3

3 6 1 1

1 1 6 6

7 7 7 720 20 20 20

11

3

6

720

...

5 passes 4 passes

Page 10: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 10/36

Benoît Charroux - Tris - Septembre 98 - 10

Algorithme du tri à bulles

3URFpGXUHtriBulles( t: tab en entrée sortie )

$OJRULWKPH

'pEXW9DULDEOHV i, j, temp: HQWLHU

3RXU i GH N-1 j 0 UpSpWHU /* sélection de l’élément à insérer*/

3RXU j GH 1 ji UpSpWHU /* décalage des éléments plus grands */

6L t[ j-1 ] > t[ j ] DORUV

tmp <- t[ j-1 ] /* échange */t[ j-1 ] <- t[ j ]

t[j ] <- tmp

)LQVL

)LQSRXU

)LQSRXU

)LQ

Page 11: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 11/36

Benoît Charroux - Tris - Septembre 98 - 11

Comparaison des performances des tris élémentaires

3URFpGXUHtriSélection( t: tab … )$OJRULWKPH

'pEXW

3RXU i GH 0 j N-2 UpSpWHU

3RXU j GH i+1 j N-1 UpSpWHU

)LQSRXU

)LQSRXU

)LQ

3URFpGXUHtriInsertion( t: tab … )$OJRULWKPH

'pEXW

3RXU i GH 1 j N-1 UpSpWHU

7DQWTXH j>0 HW t[j-1]>mem UpSpWHU

)LQWDQWTXH

)LQSRXU

)LQ

3URFpGXUHtriBulles( t: tab … )$OJRULWKPH

'pEXW

3RXU i GH N-1 j 0 UpSpWHU

3RXU j GH 1 ji UpSpWHU

)LQSRXU

)LQSRXU

)LQ

Ces méthodes prennent de l’ordre de N2 étapes

 pour trier N éléments :

• N petit ou éléments presque triés ;

• N grand et éléments dans un ordre

aléatoire.

Page 12: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 12/36

Benoît Charroux - Tris - Septembre 98 - 12

Performances du tri par sélection

3URFpGXUHtriSélection( t: tab en entrée sortie )

$OJRULWKPH

'pEXW

3RXU i GH 0 j N-2 UpSpWHU /* boucle N-1 fois */3RXU j GH i+1 j N-1 UpSpWHU /* boucle N-i fois */

6L t[ j ] < t[ min ] DORUV /* (N-1)+(N-2)+…+2+1=N(N-1)/2 comparaisons */

min <- j /* seule partie qui dépend des données */

)LQVL

)LQSRXU

... /* N-1 échanges */

)LQSRXU

)LQ

Tri par sélection :

• nombre de comparaison de l’ordre de N2/2 ;

• nombre d’échanges de l’ordre de N.

Page 13: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 13/36

Benoît Charroux - Tris - Septembre 98 - 13

Performances du tri par insertion

Tri par insertion :• nombre de comparaison de l’ordre de N2/4 ;

• nombre d’échanges de l’ordre de N2/8 ;

• linéaire si les données sont déjà triées.

3URFpGXUHtriInsertion( t: tab … )

$OJRULWKPH

'pEXW

3RXU i GH 1 j N-1 UpSpWHU /* boucle N-1 fois */mem <- t[ i ]

 j <- i

7DQWTXH ... t[j-1]>mem UpSpWHU/* boucle i fois ⇒ 1+2+…+(N-1)=N(N-1)/2 */

t[ j ] <- t[ j-1 ] /* N(N-1)/2 « demi échanges » */

)LQWDQWTXH

)LQSRXU

)LQ

Dans le pire des cas :

• nombre de comparaisons -> N2/2

• nombre d’échanges -> N2 /4

Page 14: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 14/36

Benoît Charroux - Tris - Septembre 98 - 14

Performances du tri à bullesTri à bulles :

• nombre de comparaison de l’ordre de N2/2 ;

• nombre d’échanges de l’ordre de N2/2 ;

• 1 seule passe si le tableau est déjà trié.

3URFpGXUHtriBulles( t: tab en entrée sortie )

$OJRULWKPH

'pEXW3RXU i GH N-1 j 0 UpSpWHU /* boucle N fois */

3RXU j GH 1 ji UpSpWHU/* boucle i fois */

6L t[ j-1 ] > t[ j ] DORUV /* 1+2+…+N ≈ N2/2 comparaisons au pire des cas */

... /* échanges = comparaisons ≈ N2/2 */

)LQVL

)LQSRXU

)LQSRXU

)LQ

Tableau trié en ordre inverse

Page 15: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 15/36

Benoît Charroux - Tris - Septembre 98 - 15

Comparaison des tris

Tri à bulles :• nombre de comparaison de l’ordre de N2/2 ;

• nombre d’échanges de l’ordre de N2/2 ;

Tri par insertion :

• nombre de comparaison de l’ordre de N2/4 ;

• nombre d’échanges de l’ordre de N2/2 ;

• linéaire si les données sont déjà triées.

Tri par sélection :

• nombre de comparaison de l’ordre de N2/2 ;

• nombre d’échanges de l’ordre de N.

Tableaux de petites tailles :

• sélection ;

• insertion ;

• bulles.

Tableaux presque triés :

• sélection ;

• insertion ;

• bulles.

Tableaux de grandes tailles et aléatoires :

• sélection ;

• insertion ;

• bulles.

Tableaux avec de grandsenregistrements mais desclefs petites :

• sélection ;

• insertion ;

• bulles.

Page 16: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 16/36

Benoît Charroux - Tris - Septembre 98 - 16

Tri shell : amélioration du tri par insertion

Inconvénient : pour ramener un

élément de la fin vers la tête, il faut

décaler tous les éléments plus

grands.

Le tri par insertion :

on considère les éléments les uns aprèsles autres en insérant chacun à sa place

 parmi les éléments déjà triés.

1 2 3 6 20 0

1 2 3 6 200

23

23

3 2 23 1 20 06

...3 1 20 2 23 06

3 2 23 1 20 06

...

0 1 3 2 20 236

• réaliser un tri par insertion sur 

des éléments séparés par h cases

=> faire moins de décalage :

• faire décroître h jusqu’à 1

 pour finir de trier le tableau.

on obtient un tableau

entrelacé partiellement trié ;

Page 17: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 17/36

Benoît Charroux - Tris - Septembre 98 - 17

Tri shell : amélioration du tri par insertionMéthode :

• réaliser un tri par insertion sur des éléments distant de h cases ;

• faire décroître h.

20 11 51 54 27 965 6 1 3 34 743 21 8

20 11 51 54 43 965 6 1 3 34 727 21 8

20 11 51 54 43 965 6 1 3 34 727 21 8

20 11 51 54 43 965 7 1 3 34 276 21 8

21 11 51 54 43 965 7 20 3 34 276 1 8

21 9 51 54 43 1165 7 20 8 34 276 1 3

37 34 43 51 53 657 8 9 11 20 211 3 6

h = 13

h = 4

...

Le choix de h est empirique : le suite …, 364, 121, 40, 13, 4 et 1 est souvent utilisée.

Page 18: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 18/36

3URFpGXUHtriShell( t: tab … )

$OJRULWKPH

'pEXW

9DULDEOHV i, j, h, mem: HQWLHU

h <- 1

7DQWTXH h <= N/9 UpSpWHU /* génère le premier de la suite */h <- 3*h+1

)LQWDQWTXH

7DQWTXH h > 0 UpSpWHU /* pour toute la suite …364, 121, 40, 13, 4, 1*/

/* tri par insertion d’éléments distant de h cases */

h <- h/3)LQWDQWTXH

)LQ

Benoît Charroux - Tris - Septembre 98 - 18

Algorithme du tri shell

3RXU i GH h+1 j N-1 UpSpWHU

mem <- t[ i ]

 j <- i

7DQWTXH j>h HW t[j-h]>mem UpSpWHU

t[ j ] <- t[ j-h ] j <- j - h

)LQWDQWTXH

t[ j ] <- mem

)LQSRXU

Page 19: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 19/36

Benoît Charroux - Tris - Septembre 98 - 19

Performances du tri shell

Tri shell :

• N3/2 comparaisons au maximum pour la suite 1,4, 13, 40, … ;

• actuellement, on ne connaît pas la complexitéen temps de cet algorithme.

Méthode de choix dans de nombreuses application :

• commencer par utiliser cette méthode même sur des tableaux

relativement gros (- 5000 éléments) ;

• si les performances sont mauvaises, envisager une autre solution.

Page 20: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 20/36

Benoît Charroux - Tris - Septembre 98 - 20

Tri rapide (quick sort)Méthode diviser pour résoudre :

❶ choisir un seuil (pivot) ;

❷ mettre les éléments plus petit que le seuil à gauche du seuil et les éléments plus grands à droite ;

❸ recommencer séparément sur les parties droite et gauche.

Il faut :

• partitionner selon un pivot ;

• recommencer sur les partitions (récursion).

20 6 1 3 1 7

1 6 1 3

1 1 3 6

1 6 1 3 7 20

1 6 1 3❸

Page 21: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 21/36

Benoît Charroux - Tris - Septembre 98 - 21

Algorithme du tri rapide

3URFpGXUHtriRapide( t: tab en entrée sortie, g: HQWLHU, d: HQWLHU )

$OJRULWKPH

'pEXW

9DULDEOH p: HQWLHU

6Ld > g DORUV

 p <- partitionnement( t, g, d ) /* p = pivot */

triRapide( t, g, p-1 ) /* trier partie gauche */

triRapide( t, p+1, d ) /* trier partie droite */)LQVL

)LQ

Page 22: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 22/36

Benoît Charroux - Tris - Septembre 98 - 22

Algorithme du tri rapide)RQFWLRQ partitionnement( t: tab, g: HQWLHU, d: HQWLHU ): HQWLHU$OJRULWKPH'pEXW

9DULDEOH i, j, p, tmp: HQWLHU  p <- t|d] /* pivot = élément de droite */

i <- g-1 /* i = curseur partant de la gauche */  j <- d /* j = curseur partant de la droite */5pSpWHU

5pSpWHU /* recherche à partir de la gauche ...*/i <- i+1

7DQWTXHt[ i ] < p /* du premier élément > pivot */5pSpWHU /* recherche à partir de la droite ...*/

 j <- j-17DQWTXH j>i HWt[ j ] > p /* du premier élément < pivot */6Li >= j DORUV /* si les curseurs se rejoignent … */

EUHDN /* la partition est faite */

)LQVLtmp <- t[i] t[i] <- t[j] t[j] <- tmp /* échange des éléments aux curseurs */

6DQVFRQGLWLRQtmp <- t[i] t[i] <- t[d] t[d] <- tmp /* déplacement du pivot à sa place */

UHWRXUi)LQ

20 6 1 11 2 7

2 6 1 11 20 7

Page 23: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 23/36

Benoît Charroux - Tris - Septembre 98 - 23

Performance du tri rapide

1 2 6 7 11 20

1 2 6 7 11

1 2 6 7

1 2 6

1 2

1

Tri le plus employé :• relativement simple ;

• de l’ordre de NlogN opérations en moyenne pour trier N éléments ;

• de l’ordre de N2 opérations dans le pire des cas : tableaux simples

(déjà triés par exemple) ;

• ∃ méthodes pour améliorer les performances (partitionnement par la

médiane).

Page 24: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 24/36

Benoît Charroux - Tris - Septembre 98 - 24

Tri par fusion (merge sort)

20 6 1 3 10 8 15 12

20 6 1 3 10 8 15 12

20 6 1 3 10 8 15 12

6 20

1 3

1 3 6 20

8 10

12 15

8 10 12 15

1 3 6 8 10 12 15 20

20 6 1 3 10 8 15 12

Fusion :

Division :

Page 25: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 25/36

Benoît Charroux - Tris - Septembre 98 - 25

Diviser 

3URFpGXUHtriFusion( t: tab en entrée sortie, g: HQWLHU, d: HQWLHU )

$OJRULWKPH

'pEXW

9DULDEOH m: HQWLHU

6Ld > g DORUV

m <- (g+d) / 2

triFusion( t, g, m ) /* trier partie gauche */

triFusion( t, m+1, d ) /* trier partie droite */… /* fusionner */

)LQVL

)LQ

Page 26: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 26/36

Benoît Charroux - Tris - Septembre 98 - 26

Fusionner à l’aide d’un tableau intermédiaire 1/2

...

3RXU i GH m j g UpSpWHU

s[ i ] <- t[ i ]

)LQSRXU

3RXU j GH m+1 j d UpSpWHU

s[ d+m+1-j ] <- t[ j ]

)LQSRXU

...

1 3 6 20 8 10 12 15tableau t :

1 3 6 20 15 12 10 8tableau intermédiaire s :

g m d

Partie miroir de t

• Remplir le tableau intermédiaire s.

Page 27: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 27/36

Benoît Charroux - Tris - Septembre 98 - 27

Fusionner à l’aide d’un tableau intermédiaire

k<-g i<-g j<-d

7DQWTXH k <= d UpSpWHU /* parcours de t */6L s[i] < s[j] DORUV

t[k] <- s[i]

i <- i+1

6LQRQ

t[k] <- s[j]

 j <- j-1

)LQVL

k <- k+1

)LQWDQWTXH

1 3 6 20 15 12 10 8tableau s :

1 3 8 10 12 15 20

tableau t :

 ji, k 

dg

6

• Comparer les éléments de s deux à deux pour les fusionner dans t.

Page 28: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 28/36

Tri par fusion :

• nombre de comparaison de l’ordre NlogN pour trier N éléments ;

• place mémoire supplémentaire proportionnelle à N ;

• tri idéal pour pour les listes chaînées (accès séquentiel) en changeant

la partie fusion de l’algorithme.

Benoît Charroux - Tris - Septembre 98 - 28

Performance du tri par fusion

Page 29: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 29/36

Benoît Charroux - Tris - Septembre 98 - 29

Tri par tas (heap sort)

20 6 1 3 10 8 15

20

10 15

3 6 1 8

15

10 8

3 6 1

Transformer en tas

❷ Trier :

❶ Transformer en tas

tel que père > fils ∀ père

• supprimer le maximum et rétablir la condition père > fils ∀ père ;

10 15

3 6 1 8

20

20

• itérer le processus tant que le tableau n’est pas trié.

Page 30: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 30/36

Benoît Charroux - Tris - Septembre 98 - 30

Transformer en tas20 6 1 3 10 8 15

20

10 15

3 6 1 8

20 10 15 3 6 1 8

0 1 2 3 4 5 6

2*2+1

2*2+2

20 10 8 3 6 1 15

0 1 2 3 4 5 6

6/2-1

20 10 15 3 6 1 8

0 1 2 3 4 5 6

 ⇒   

20

10 8

3 6 1 15

20

10 15

3 6 1 8

Insérer 15 ? ❶ chercher le père :

❷  permuter si nécessaire :

Si père à i :• fils 1 à 2*i+1

• fils 2 à 2*i+2

Page 31: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 31/36

3URFpGXUHinsertionTas( t: tab ..., v: HQWLHU )

$OJRULWKPH

'pEXW

9DULDEOH p: HQWLHU

 N <- N + 1

t[ N ] <- v /* ajout nouveau en fin de tableau */

i <- N

7DQWTXHi<=1 et t[ i/2-1 ] <= v UpSpWHU /* tant que père <= nouveau */

t[ i ] <- t[ i/2-1 ] /* fait descendre le père */i <- i/2-1 /* père suivant */

)LQWDQWTXH

t[ i ] <- v /* positionne nouveau */

)LQ

Benoît Charroux - Tris - Septembre 98 - 31

Transformer en tas

20 10 8 3 6 1 15

0 1 2 3 4 5 6

6/2-1

20 10 15 3 6 1 8

0 1 2 3 4 5 6

❶chercher le père :

❷ permuter si nécessaire :

Page 32: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 32/36

3URFpGXUHWriParTas( t: tab en entrée sortie )

$OJRULWKPH'pEXW

9DULDEOH i: HQWLHU

3RXUiGH1j NUpSpWHU

insertionTas( t, t[ i ] ) /* transformer en tas */

)LQSRXU3RXUiGH Nj0UpSpWHU

t[ i ] <- supprimerMax( t ) /* trier */

)LQSRXU

)LQ

Benoît Charroux - Tris - Septembre 98 - 32

Trier 

15

10 8

3 6 1

10 15

3 6 1 8

20

20

Page 33: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 33/36

)RQFWLRQsupprimerMax( t: tab en entrée sortie ) : HQWLHU

$OJRULWKPH

'pEXW

9DULDEOH i, j, v, max: HQWLHU

max <- t[ 1 ]

t[ 1 ] <- t| N ] /* place le dernier élément en tête */

  N <- N-1 /* supprime la dernière case (le max) */

… /* reconstruire le tas */

UHWRXU max

)LQ

Benoît Charroux - Tris - Septembre 98 - 33

Supprimer le maximum 1/2

10 15

3 6 1 8

20

20

20 10 15 3 6 1 80 1 2 3 4 5 6

Page 34: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 34/36

Benoît Charroux - Tris - Septembre 98 - 34

Supprimer le maximum 2/2

/* reconstruire le tas */v <- t[ 1 ]

7DQWTXH i <= N/2 UpSpWHU

  j <- i+i /* j est le premier fils de i */

6L j<N et t[j]<t[j+1] DORUV /* si le deuxième fils est plus grand … */

  j <- j+1 /* on le garde */

)LQVL

6L v >= t[ j ] DORUV

EUHDN 

)LQVL

t[ i ] <- t[ j ] /* échange avec le plus grand des fils */

i <- j /* y a-t’il d’autres fils ? */

)LQWDQWTXH

t[ i ] <- v

8 10 15 3 6 1

0 1 2 3 4 5 6

15 10 8 3 6 1

0 1 2 3 4 5 6

15

10 8

3 6 1

Page 35: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 35/36

Tri par tas :

• nécessite de l ’ordre de NlogN étapes pour trier N éléments ;

• pas de place mémoire supplémentaire ;

• en moyenne deux fois plus lent que le tri rapide.

Benoît Charroux - Tris - Septembre 98 - 35

Performance du tri par tas

Page 36: Méthodes de tri

8/3/2019 Méthodes de tri

http://slidepdf.com/reader/full/methodes-de-tri 36/36

Benoît Charroux - Tris - Septembre 98 - 36

Comparaison des tris

Tri shell :

• de l’ordre de N3/2 comparaisons.

Tri rapide :

• de l’ordre de NlogN opérations ;

• de l’ordre de N2 opérations dans le pire des cas.

Tri par fusion :

• nombre de comparaison de l’ordre NlogN ;

• place mémoire supplémentaire proportionnelle à N.

Tri par tas :• nécessite de l’ordre de NlogN étapes ;

• en moyenne deux fois plus lent que le tri rapide.

Le plus employé :

• tri rapide

Le plus simple sur desfichiers relativement gros(-5000 éléments) :

• tri shell

Tri de listes chaînées :

• tri par fusion

Tri de fichiers partiellement triés :

• tri par tas