55
Algorithmes de tri Algorithmique 1 - 2019-2020 Stéphane Grandcolas Aix-Marseille Université 2019-2020

Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Algorithmes de triAlgorithmique 1 - 2019-2020

Stéphane Grandcolas

Aix-Marseille Université

2019-2020

Page 2: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tris.

I Arbre de décision : tri par insertion.I Complexité des tris par comparaison dans le pire des cas :

borne minimale.I Tri rapide.I Tri par dénombrement, tri par base.

Page 3: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tris.

organiser un ensemble d’objets selon un ordre déterminé

relation d’ordre : comparaison de clés

dans nos exemple nous confondrons les objets avec leurs clés

I tri par comparaison versus tri par indexation

I tri sur place : espace mémoire de taille constante

I tri stable : préserve l’ordre initial en cas d’égalité

Page 4: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tris.

1. Tris en O(n2).I tri à bulles,I tri par insertion,I tri par sélection.

2. Tris en O(n × log n).I tri par fusion,I tri par tas,I tri rapide (mais en O(n2) dans le pire des cas).

3. Tris spéciaux.I tri shell (probablement O(n1.25)),I tri par dénombrement (O(n)).

Page 5: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par insertion

partie non triéeipartie triée

x

Principe : insérer les éléments les uns après les autres dans lapartie triée

Page 6: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par insertion

partie triée i partie non triée

x

Principe : insérer les éléments les uns après les autres dans lapartie triée

Insertion : recopie des éléments plus grands vers la droite

Page 7: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par insertion

procédure TRI_PAR_INSERTION(T [1, . . . , n])début

pour i := 2 jusqu’à n fairej := i ,tant que ((j > 1) et (T [j ] < T [j − 1])) faire

// la suite T [1, . . . , j − 1] est ordonnéePERMUTER(T , j , j − 1),j := j − 1,

fin fairefin faire

fin procédure

Page 8: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par insertion

Pire des cas : i − 1 permutations à chaque passage.

T (n) =n∑

i=2

i = O(n2)

Meilleur des cas : aucune permutation (mais unecomparaison).

T (n) =n∑

i=2

1 = O(n)

Page 9: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Nombre d’inversions

Inversion : (i , j) tel que i < j et T [i ] > T [j ]

7 inversions

153 11 8 12 7 21 19

I suite triée : 0 inversionsI suite triée dans l’ordre décroissant : n × (n − 1)/2

inversions

Page 10: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Nombre d’inversions

Permutation de deux éléments consécutifs inversés :

b

i + 1

a

i

n3

n1 n2

nb inversions = n1 + n2 + n3 + nbInv(i) + nbInv(i + 1) + 1

Page 11: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Nombre d’inversions

Permutation de deux éléments consécutifs inversés :

a

i + 1

b

i

n3

n2n1

nb inversions = n1 + n2 + n3 + nbInv(i) + nbInv(i + 1)

Page 12: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Nombre d’inversions

Permutation de deux éléments consécutifs inversés :

a

i + 1

b

i

n3

n2n1

nb inversions = n1 + n2 + n3 + nbInv(i) + nbInv(i + 1)

En permutant deux éléments successifs non ordonnéson diminue de 1 le nombre d’inversions

Page 13: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Arbre de décision d’un tri.

I tris par comparaisonI comparaison → décision de permuter ou non

Arbre de décision : représente tous les scénarios possiblespour une suite de n valeurs.

Branche : la suite de permutations faites par le tri pourproduire la séquence ordonnée

Page 14: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Arbre de décision du tri par insertion.

c acb a

b c a bc ac a ba c b

a c b

cba

b > c

ba

cba

cb a

b

321

a <= b a > b

a <= c a > cb <= c b > c

a <= c a > c b <= c

c

<= >

<=

<= >

<=

>

>

<=

>

nombre de feuilles = nombre de branches = n!(1) On peut composer n! suites différentes à partir de n valeurs différentes.(2) On ne peut pas trier deux suites u et v différentes avec la même séquence de permutations ρ.En effet, ∃i, j tels que ui < uj et vi > vj , il faudrait donc ρ(i) < ρ(j) et ρ(i) > ρ(j).

Page 15: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Arbre de décision du tri par insertion.

c acb a

b c a bc ac a ba c b

a c b

cba

b > c

ba

cba

cb a

b

321

a <= b a > b

a <= c a > cb <= c b > c

a <= c a > c b <= c

c

<= >

<=

<= >

<=

>

>

<=

>

nombre de feuilles = nombre de branches = n!(1) On peut composer n! suites différentes à partir de n valeurs différentes.(2) On ne peut pas trier deux suites u et v différentes avec la même séquence de permutations ρ.En effet, ∃i, j tels que ui < uj et vi > vj , il faudrait donc ρ(i) < ρ(j) et ρ(i) > ρ(j).

Page 16: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Complexité des tris par comparaison

Nombre de feuilles : n!

hauteur de l’arbre de décision :

h(n) ≥ log(n!)

or (formule de Stirling)

log(n!) ≥ log(ne

)n= n × log n − n × log e

donch(n) ≥ n × (log n − 2) ≈ n × log n

Page 17: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri rapide (quick sort)

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 Choisir pivot dans T [g , . . . , d ],3 m :=PARTITIONNER(T , g , d , pivot),4 TRI_RAPIDE (T , g ,m − 1),5 TRI_RAPIDE (T ,m + 1, d),

I tri par comparaisons en place,I tableau indexé,I le plus rapide dans le cas général,I très utilisé

Page 18: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri rapide (quick sort)

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 Choisir pivot dans T [g , . . . , d ],3 m :=PARTITIONNER(T , g , d , pivot),4 TRI_RAPIDE (T , g ,m − 1), { m − 1 < d}5 TRI_RAPIDE (T ,m + 1, d), { m + 1 > g}

Page 19: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri rapide (quick sort)

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 Choisir pivot dans T [g , . . . , d ],3 m :=PARTITIONNER(T , g , d , pivot),4 TRI_RAPIDE (T , g ,m − 1), { m − 1 < d}5 TRI_RAPIDE (T ,m + 1, d), { m + 1 > g}

Partition :

11 23 1417134 26 7

112317 4 8 1413 2 9 7 6

9 8

≥ pivot

pivotg

g m

d

d

≤ pivot

Page 20: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri rapide (quick sort)

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 Choisir pivot dans T [g , . . . , d ],3 m :=PARTITIONNER(T , g , d , pivot),4 TRI_RAPIDE (T , g ,m − 1),5 TRI_RAPIDE (T ,m + 1, d),

8

26 79 8 23 141713

112317 4 8 1413 2 9 7 6

4 2 7 9 8 1317 14

2 7 8 13 17

4

Page 21: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri rapide (quick sort)

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 Choisir pivot dans T [g , . . . , d ],3 m :=PARTITIONNER(T , g , d , pivot), O(n)4 TRI_RAPIDE (T , g ,m − 1), T (n/2)5 TRI_RAPIDE (T ,m + 1, d), T (n/2)

Dans le meilleur cas

T (n) = n + 1+ 2× T (n/2) = O(n × log n)

Page 22: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri rapide (quick sort)

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 Choisir pivot dans T [g , . . . , d ],3 m :=PARTITIONNER(T , g , d , pivot), O(n)4 TRI_RAPIDE (T , g ,m − 1), T (0)5 TRI_RAPIDE (T ,m + 1, d), T (n − 1)

Dans le pire des cas

T (n) = n + 1+ T (n − 1) = O(n2)

Page 23: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition type drapeau

Après la partition :

d

= pivot< pivot > pivot

g

Page 24: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition type drapeau

Pendant la partition :

g

= pivot x > pivot< pivot

i

éléments en attente

d

Page 25: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition type drapeau

cas 1 : x > pivot : permutation avec le dernier en attente

d

= pivot

g d

= pivot x > pivot< pivot

< pivot > pivotx

i

ig

Page 26: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition type drapeau

cas 2 : x = pivot : extension de la zone

i d

= pivot

g d

= pivot x > pivot< pivot

< pivot > pivotx

i

g

Page 27: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition type drapeau

cas 3 : x < pivot : permutation avec le premier égal au pivot

d

g d

= pivot x > pivot< pivot

< pivot > pivot= pivotx

i

ig

Page 28: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

1123 4 8 13 2 9 12 6710

g

18 17 14

d

11

i j

≤ pivot≥ pivot

à gauche : stoppe avec xi ≥ pivotà droite : stoppe avec xj ≤ pivot

Page 29: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

1123 4 8 13 2 9 12 6710

g

18 17 14

d

11

Permutation

Page 30: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

1123 4 8 13 2 9 12710

g

18 17 14

d

6 11

Extension des zones

Page 31: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

1123 4 8 13 2 9 12710

g

18 17 14

d

6 11

Recherche d’un plus grand à gauche et d’un plus petit à droite

Page 32: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

114 8 13 2 12710

g

18 17 14

d

6 119 23

Permutation et extension des zones

Page 33: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

114 8 13 2 12710

g

18 17 14

d

6 119 23

Recherche d’un plus grand à gauche et d’un plus petit à droite

Page 34: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

114 8 12710

g

18 17 14

d

6 119 232 13

Permutation et extension des zones

Page 35: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

pivot

114 8 12710

g

18 17 14

d

6 119 232 13

Dernière permutation

Page 36: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Partition rapide

114 8 12710

g

18 17 14

d

6 119 232 13

Produit deux zones strictement plus petites que [g , d ]

La partition est en O(n)

Page 37: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Quick sort avec partition rapide

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 a := g , b := d ,3 v := T [(a+ b)/2],4 tant que (a ≤ b) faire5 tant que (T [a] < v) faire6 a := a+ 1,7 tant que (T [b] > v) faire8 b := b − 1,9 si (a ≤ b) alors10 PERMUTER(T , a, b),11 a := a+ 1,12 b := b − 1,13 TRI_RAPIDE (T , g , b),14 TRI_RAPIDE (T , a, d),15 fin fonction

Page 38: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Quick sort : terminaison

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors n = d − g + 1 > 12 a := g , b := d ,3 v := T [(a+ b)/2],4 tant que (a ≤ b) faire5 tant que (T [a] < v) faire la première fois stoppée par le pivot,6 a := a+ 1, ensuite stoppée par T [b]7 tant que (T [b] > v) faire8 b := b − 1,9 si (a ≤ b) alors10 PERMUTER(T , a, b),11 a := a+ 1,12 b := b − 1,13 TRI_RAPIDE (T , g , b),14 TRI_RAPIDE (T , a, d),15 fin fonction

Page 39: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Quick sort : terminaison

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors n = d − g + 1 > 12 a := g , b := d ,3 v := T [(a+ b)/2],4 tant que (a ≤ b) faire5 tant que (T [a] < v) faire6 a := a+ 1,7 tant que (T [b] > v) faire la première fois stoppée par le pivot,8 b := b − 1, ensuite stoppée par T [a]9 si (a ≤ b) alors10 PERMUTER(T , a, b),11 a := a+ 1,12 b := b − 1,13 TRI_RAPIDE (T , g , b),14 TRI_RAPIDE (T , a, d),15 fin fonction

Page 40: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Quick sort : terminaison

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors n = d − g + 1 > 12 a := g , b := d ,3 v := T [(a+ b)/2],4 tant que (a ≤ b) faire5 tant que (T [a] < v) faire6 a := a+ 1,7 tant que (T [b] > v) faire8 b := b − 1,9 si (a ≤ b) alors forcément vrai la première fois10 PERMUTER(T , a, b),11 a := a+ 1,12 b := b − 1,13 TRI_RAPIDE (T , g , b),14 TRI_RAPIDE (T , a, d),15 fin fonction

Page 41: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Quick sort : terminaison

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors n = d − g + 1 > 12 a := g , b := d ,3 v := T [(a+ b)/2],4 tant que (a ≤ b) faire5 tant que (T [a] < v) faire6 a := a+ 1,7 tant que (T [b] > v) faire8 b := b − 1,9 si (a ≤ b) alors forcément vrai la première fois10 PERMUTER(T , a, b),11 a := a+ 1, on incrémente a au moins une fois12 b := b − 1, on décrémente b au moins une fois13 TRI_RAPIDE (T , g , b),14 TRI_RAPIDE (T , a, d),15 fin fonction

Page 42: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Quick sort : terminaison

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors n = d − g + 1 > 12 a := g , b := d ,3 v := T [(a+ b)/2],4 tant que (a ≤ b) faire5 tant que (T [a] < v) faire6 a := a+ 1,7 tant que (T [b] > v) faire8 b := b − 1,9 si (a ≤ b) alors forcément vrai la première fois10 PERMUTER(T , a, b),11 a := a+ 1, on incrémente a au moins une fois12 b := b − 1, on décrémente b au moins une fois13 TRI_RAPIDE (T , g , b), ici b < d donc b − g + 1 < n14 TRI_RAPIDE (T , a, d), ici a > g donc d − a+ 1 < n15 fin fonction

Page 43: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Quick sort : justesse

fonction TRI_RAPIDE (T , g , d)

1 si (g < d) alors2 a := g , b := d ,3 v := T [(a+ b)/2],4 tant que (a ≤ b) faire

{∀i , si g ≤ i < a alors T [i ] ≤ v , et si b < i ≤ d alors T [i ] ≥ v ,}5 tant que (T [a] < v) faire6 a := a+ 1, {T [a− 1] < v}7 tant que (T [b] > v) faire8 b := b − 1, {T [b + 1] > v}9 si (a ≤ b) alors10 PERMUTER(T , a, b),

{T [a] ≤ v et T [b] ≥ v}11 a := a+ 1,12 b := b − 1,

{donc si i < a alors T [i ] ≤ v et si i > b alors T [i ] ≥ v ,}13 TRI_RAPIDE (T , g , b), {b < a et ∀i , i < a on a T [i ] ≤ v}14 TRI_RAPIDE (T , a, d), {a > b et ∀i , i > b on a T [i ] ≥ v}15 fin fonction

Page 44: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

1

1 3 3 3 112 2 21 12

2

22

33

3211

11

Tri sans comparaison : suppose que l’on sait indexer leséléments à trier, i.e. affecter à chacun un rang

I qui dépends uniquement de sa valeurI qui correspond à l’ordre défini sur les éléments

tri du facteur qui prépare sa tournée,tri de valeurs entières assez proches et nombreuses.

Page 45: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

Calcul des nombres d’apparitions

Nombres d’apparitions 3 4 3

0 1 2

nb

2 3 4 5 6 7 8 91

T

0

0 0 01 1 1 12 2 2

Page 46: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

Calcul des positions des premiers de chaque classe

0 1 2

0 3 7posIndices des premiers

Nombres d’apparitions 3 4 3

0 1 2

nb

2 3 4 5 6 7 8 91

T

0

0 0 01 1 1 12 2 2

Page 47: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

Positionnement dans le tableau résultat

0 1 2

0 3 7posIndices des premiers

Nombres d’apparitions 3 4 3

0 1 2

nb

2 3 4 5 6 7 8 91

T

0

0 0 01 1 1 12 2 2

2 3 4 5 6 7 8 90

1 2 3 4 5 6 7 8 90

0 2 0 1 2 1 0 2 1 1T

R − − − − − − −−−

1

Page 48: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

Positionnement dans le tableau résultat

1 3 7placement de T[0] en R[0] pos

0 1 2

0 3 7posIndices des premiers

Nombres d’apparitions 3 4 3

0 1 2

nb

2 3 4 5 6 7 8 91

T

0

0 0 01 1 1 12 2 2

2 3 4 5 6 7 8 90

1 2 3 4 5 6 7 8 90

0 2 0 1 2 1 0 2 1 1

0

T

R − − − − − − −−

1

Page 49: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

Positionnement dans le tableau résultat

1 3 8posplacement de T[1] en R[7]

1 3 7placement de T[0] en R[0] pos

0 1 2

0 3 7posIndices des premiers

Nombres d’apparitions 3 4 3

0 1 2

nb

2 3 4 5 6 7 8 91

T

0

0 0 01 1 1 12 2 2

2 3 4 5 6 7 8 90

1 2 3 4 5 6 7 8 90

0 2 0 1 2 1 0 2 1 1

0 2

T

R − − − − − − −

1

Page 50: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

Positionnement dans le tableau résultat

2 3 8posplacement de T[2] en R[1]

1 3 8posplacement de T[1] en R[7]

1 3 7placement de T[0] en R[0] pos

0 1 2

0 3 7posIndices des premiers

Nombres d’apparitions 3 4 3

0 1 2

nb

2 3 4 5 6 7 8 91

T

0

0 0 01 1 1 12 2 2

2 3 4 5 6 7 8 90

1 2 3 4 5 6 7 8 90

0 2 0 1 2 1 0 2 1 1

0 0 2

T

R − − − − − −

1

Page 51: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par dénombrement.

fonction TRI_PAR_DENOMBREMENTS(T , n){In : T un tableau de n éléments}{Out : R le tableau trié des éléments de T}début

pour i := 0 à k − 1 faire initialisationsnb[i ] := 0,

pour i := 1 à n faire calcul des nombres d’apparitionsnb[T [i ]] := nb[T [i ]] + 1,

pos[0] := 0, calcul des indices du premierpour i := 1 à k − 1 faire élément de chaque catégorie

pos[i ] := pos[i − 1] + nb[i − 1],pour i := 1 à n faire recopie des élément originaux

R[pos[T [i ]]] := T [i ], du tableau T dans Rpos[T [i ]] := pos[T [i ]] + 1,

renvoyer Rfin procédure

Complexité : O(n + k).

Page 52: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par base.

Utilise le tri par dénombrement en plusieurs passes

536893427167853592197462

Page 53: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par base.

Utilise le tri par dénombrement en plusieurs passes

536 592893 462427 893167 853853 536592 427197 167462 197

Page 54: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par base.

Utilise le tri par dénombrement en plusieurs passes

536 592 427893 462 536427 893 853167 853 462853 536 167592 427 592197 167 893462 197 197

Page 55: Algorithmes de tri - Algorithmique 1 - 2019-2020gcolas/algo-licence/slides/tris.pdfTris. 1.TrisenO(n2). I tri à bulles, I tri par insertion, I tri par sélection. 2.TrisenO(n log

Tri par base.

Utilise le tri par dénombrement en plusieurs passes

536 592 427 167893 462 536 197427 893 853 427167 853 462 462853 536 167 536592 427 592 592197 167 893 853462 197 197 893

n nombres à c chiffres en base k : O(c × n + c × k).

Si k = O(n) le tri par base est linéaire (O(n)).