![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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/45.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/46.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/47.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/50.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/51.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/52.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/53.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/54.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022081621/61308a081ecc515869442982/html5/thumbnails/55.jpg)
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)).