13-trirec.pptsite.uottawa.ca/~laganier/csi2510/csi2510trirec.pdf · title: microsoft powerpoint -...
TRANSCRIPT
Recursive Sort 11/6/2013 12:56 PM
CSI2510 1
CSI2510 1
Tri Plus efficace
CSI2510 2
Tri récursif
Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement sur ces plus petites séries de données. Ceci est appelé le paradigme Diviser pour régner (Divide-and-Conquer).
Nous verrons deux tris récursifs:
�tri par fusion (Merge Sort)�tri rapide (Quick Sort)
CSI2510 3
Divide-and-ConquerParadigme diviser pour régner :� Diviser: Si la taille des données est trop grande pour
les traiter d’une façon directe alors les diviser en deux ou plusieurs sous-ensembles disjoints.
� Appliquer récursivement: Utilisez l’approche diviser pour régner afin de résoudre les sous-problèmes associés aux sous-ensembles de données.
� Régner: Prendre les solutions aux sous-problèmes et “fusionner” ces solutions afin d’obtenir la solution au problème initial.
Le cas de base pour la récursivité est le sous-problème trivial, souvent de taille 0 ou 1.
CSI2510 4
Tri par fusion (Mergesort)
Recursive Sort 11/6/2013 12:56 PM
CSI2510 2
CSI2510 5
Tri par fusion
Le tri par fusion est un algorithme de tri basé sur le paradigme diviser pour régnerComme le tri par tas� Il utilise un comparateur� Il est exécuté en un temps O(n log n)
Contrairement au tri par tas� Il n'utilise pas une file à priorité auxiliaire � Il accède aux données d’une manière
séquentielle (convenable pour trier des données sur un disque)
CSI2510 6
Tri par fusionLe tri par fusion sur une séquence d'entrée S avec n éléments consiste en trois étapes:
� Diviser: diviser S en 2 groupes d’environ n/2 éléments chacun
� Appliquer récursivement : trierrécursivement S1 et S2
� Régner: fusionner S1 et S2 dans une séquence triée
CSI2510 7
Fusion de deux séquences triées :
L’étape ‘Régner’ fusionne les 2 séquences triées A etB dans une séquence trié SComment? Comparer l'élément le plus petit de A etcelui de B et insérer le plus petit dans SLa fusion des deux séquences triées, chacune avecn/2 éléments prend un temps O (n)
CSI2510 8
Tri par fusionAlgorithm mergeSort(S, C)
Input séquence S avec n éléments,
comparateur C
Output séquence S triée selon C
if S.size() > 1
(S1, S2) ← partition(S, n/2)
mergeSort(S1, C)
mergeSort(S2, C)
S ← merge(S1, S2,C)
Recursive Sort 11/6/2013 12:56 PM
CSI2510 3
CSI2510 9
2 5 6 9 12 15 20 27
4 7 10 13 16
2 4 5 6
A
B
S
CSI2510 10
Fusion de deux séquences triéesAlgorithm merge(A, B,C)
Input séquences triées A et B
comparateur C
Output séquence triée de A ∪ B
S ← séquence vide
while !A.isEmpty() ∧∧∧∧ !B.isEmpty()
if C.isLessThan(A.first().element(), B.first().element())
S.insertLast(A.remove(A.first()))
else
S.insertLast(B.remove(B.first()))
while !A.isEmpty()
S.insertLast(A.remove(A.first()))
while !B.isEmpty()
S.insertLast(B.remove(B.first()))
return S
CSI2510 11
Arbre de tri par fusion
7 2 9 4 →→→→ 2 4 7 9
7 2 →→→→ 2 7 9 4 →→→→ 4 9
7 →→→→ 7 2 →→→→ 2 9 →→→→ 9 4 →→→→ 4
L’exécution du tri par fusion est représenté comme un arbre binaire� chaque nœud représente un appel récursif du tri par fusion et
emmagasine � la séquence non triée avant l'exécution et sa partition� La séquence triée à la fin de l'exécution
� la racine représente l’appel initial� les enfants sont les appels pour les sous-séquences � les feuilles sont les appels pour les séquences de taille 0 ou 1
CSI2510 12
Tri par fusion – Exemple1
Partition
7 →→→→ 7 2 →→→→ 2 9 →→→→ 9 4 →→→→ 4 3 →→→→ 3 8 →→→→ 8 6 →→→→ 6 1 →→→→ 1
7 2 9 4 3 8 6 1
12CSI2510 - Aut.09 - Tris recursifs
Recursive Sort 11/6/2013 12:56 PM
CSI2510 4
CSI2510 13
Appel récursif + partition
7 2 9 4
7 2 9 4 3 8 6 1
13CSI2510 - Aut.09 - Tris recursifs
Tri par fusion – Exemple1
CSI2510 14
7 2 9 4
7 2
7 2 9 4 3 8 6
14CSI2510 - Aut.09 - Tris recursifs
Tri par fusion – Exemple1
Appel récursif + partition
CSI2510 15
7 2 9 4
7 2
7 →→→→ 7
7 2 9 4 3 8 6 1
15CSI2510 - Aut.09 - Tris recursifs
Tri par fusion – Exemple1Appel récursif + appel de base
CSI2510 16
7 2 9 4
7 2
7 →→→→ 7 2 →→→→ 2
7 2 9 4 3 8 6 1
16CSI2510 - Aut.09 - Tris recursifs
Tri par fusion – Exemple1Appel récursif + appel de base
Recursive Sort 11/6/2013 12:56 PM
CSI2510 5
CSI2510 17
Fusion
7 2 9 4
7 2 →→→→ 2 7
7 →→→→ 7 2 →→→→ 2
7 2 9 4 3 8 6 1
17CSI2510 - Aut.09 - Tris recursifs
Tri par fusion – Exemple1
CSI2510 18
Appel récursif, …, appel de base, fusion
7 2 9 4
7 2 →→→→ 2 7 9 4 →→→→ 4 9
7 →→→→ 7 2 →→→→ 2 9 →→→→ 9 4 →→→→ 4
7 2 9 4 3 8 6 1
18CSI2510 - Aut.09 - Tris recursifs
Tri par fusion – Exemple1
CSI2510 19
Fusion
7 2 9 4 →→→→ 2 4 7 9
7 2 →→→→ 2 7 9 4 →→→→ 4 9
7 →→→→ 7 2 →→→→ 2 9 →→→→ 9 4 →→→→ 4
7 2 9 4 3 8 6 1
19CSI2510 - Aut.09 - Tris recursifs
Tri par fusion - Example
CSI2510 20
7 2 9 4 →→→→ 2 4 7 9 3 8 6 1 →→→→ 1 3 8 6
7 2 →→→→ 2 7 9 4 →→→→ 4 9 3 8 →→→→ 3 8 6 1 →→→→ 1 6
7 →→→→ 7 2 →→→→ 2 9 →→→→ 9 4 →→→→ 4 3 →→→→ 3 8 →→→→ 8 6 →→→→ 6 1 →→→→ 1
7 2 9 4 3 8 6 1
20CSI2510 - Aut.09 - Tris recursifs
Tri par fusion - Example
Appel récursif, …, appel de base, fusion
Recursive Sort 11/6/2013 12:56 PM
CSI2510 6
CSI2510 21
Fusion
7 2 9 4 →→→→ 2 4 7 9 3 8 6 1 →→→→ 1 3 8 6
7 2 →→→→ 2 7 9 4 →→→→ 4 9 3 8 →→→→ 3 8 6 1 →→→→ 1 6
7 →→→→ 7 2 →→→→ 2 9 →→→→ 9 4 →→→→ 4 3 →→→→ 3 8 →→→→ 8 6 →→→→ 6 1 →→→→ 1
7 2 9 4 3 8 6 1 →→→→ 1 2 3 4 6 7 8 9
21CSI2510 - Aut.09 - Tris recursifs
Tri par fusion – Exemple1
CSI2510 22
674523 14 6 3398 42
Tri par fusion – Exemple2
CSI2510 23
674523 14 6 3398 42
674523 14 6 3398 42
CSI2510 24
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
Recursive Sort 11/6/2013 12:56 PM
CSI2510 7
CSI2510 25
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
CSI2510 26
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
Fusionner
CSI2510 27
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
23
Fusionner
CSI2510 28
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
23 98
Fusionner
Recursive Sort 11/6/2013 12:56 PM
CSI2510 8
CSI2510 29
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
23 98
CSI2510 30
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Fusionner
23 98
CSI2510 31
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
14
Fusionner
23 98
CSI2510 32
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
45
Fusionner
23 98 14
Recursive Sort 11/6/2013 12:56 PM
CSI2510 9
CSI2510 33
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Fusionner
98 451423
CSI2510 34
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Fusionner
98 14
14
23 45
CSI2510 35
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Fusionner
23 14
14 23
98 45
CSI2510 36
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Fusionner
23 98 4514
14 23 45
Recursive Sort 11/6/2013 12:56 PM
CSI2510 10
CSI2510 37
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Fusionner
23 98 4514
14 23 45 98
CSI2510 38
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
23 98 4514
14 23 45 98
CSI2510 39
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
23 98 4514
14 23 45 98
CSI2510 40
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
Fusionner
23 98 4514
14 23 45 98
Recursive Sort 11/6/2013 12:56 PM
CSI2510 11
CSI2510 41
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
6
Fusionner
23 98 4514
14 23 45 98
CSI2510 42
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
67
Fusionner
23 98 4514 6
14 23 45 98
CSI2510 43
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
23 98 4514 676
14 23 45 98
CSI2510 44
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676
14 23 45 98
Recursive Sort 11/6/2013 12:56 PM
CSI2510 12
CSI2510 45
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
3323 98 4514 676
14 23 45 98
CSI2510 46
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
4223 98 4514 676 33
14 23 45 98
CSI2510 47
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 45 98
CSI2510 48
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 6 4233
14 23 45 98 6
67
Recursive Sort 11/6/2013 12:56 PM
CSI2510 13
CSI2510 49
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 6 33
14 23 45 98 6 33
67 42
CSI2510 50
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 6 4233
14 23 45 98 6 33 42
67
CSI2510 51
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 45 98 6 33 42 67
CSI2510 52
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
23 45 98 33 42 6714 6
Recursive Sort 11/6/2013 12:56 PM
CSI2510 14
CSI2510 53
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
23 45 98 6 42 67
6
14 33
CSI2510 54
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 45 98 6 42 67
6 14
23 33
CSI2510 55
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 98 6 42 67
6 14 23
45 33
CSI2510 56
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 98 6 33 67
6 14 23 33
45 42
Recursive Sort 11/6/2013 12:56 PM
CSI2510 15
CSI2510 57
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 98 6 33 42
6 14 23 33 42
45 67
CSI2510 58
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 45 6 33 42
6 14 23 33 42 45
98 67
CSI2510 59
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 45 98 6 33 42 67
6 14 23 33 42 45 67
CSI2510 60
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Fusionner
23 98 4514 676 4233
14 23 45 98 6 33 42 67
6 14 23 33 42 45 67 98
Recursive Sort 11/6/2013 12:56 PM
CSI2510 16
CSI2510 61
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
23 98 4514 676 4233
14 23 45 98 6 33 42 67
6 14 23 33 42 45 67 98
CSI2510 62
674523 14 6 3398 42
6 14 23 33 42 45 67 98
CSI2510 63
Analyse du tri par fusion
profondeur #séqs taille
0 1 n
1 2 n////2
i 2i n////2i
… … …
Le hauteur h de l'arbre de tri par fusion est O(log n)
� à chaque appel récursif, nous divisons la séquence en deux La quantité de travail aux nœuds de profondeur i est O(n)
� on divise et fusionne 2i séquences de taille n////2i
� on fait 2i+1 appels récurrentsAinsi, le temps total d’exécution du tri par fusion est O(n log n)
CSI2510 64
Tri rapide (Quicksort)
Recursive Sort 11/6/2013 12:56 PM
CSI2510 17
CSI2510 65
Tri rapideTri rapide est un algorithme de triage aléatoire basé sur le paradigme divide-and-conquer:� Diviser: choisir un élément au
hasard x (appelé le pivot) et partitionner S en sous-ensembles� L: les éléments plus petit que x� E: les éléments égaux à x� G: les éléments plus grand que x
� Appliquer récursivement : tri L et G
� Conquérir : fusionner L, E et G
x
x
L GE
x
CSI2510 66
i ← PIVOT
x ← S.elemAtRank(i)
(L,G) ← Partition(S,x)
QuickSort(L)
QuickSort(G)
QuickSort(S)
xS
x
L GE
CSI2510 67
PartitionNous partitionnons une séquence d'entrée comme suit :� Nous enlevons, un à un,
chaque élément y de S et � Nous insérons y dans L, E
ou G, dépendant du résultat de la comparaison avec le pivot x
Chaque insertion et suppression sont au début ou à la fin d'une séquence, et alors il prend un temps O (1) Ainsi, l'étape de partition du tri rapide prend un temps O(n)
Algorithm partition(S, p)
entrées séquence S, position p du pivot
sortie sous-séquences L, E, G des éléments de S plus petits que, égaux à,
ou plus grands que le pivot, resp.
L, E, G ← séquences vides
x ← S.remove(p)
while !S.isEmpty()
y ← S.remove(S.first())
if y < x
L.insertLast(y)
else if y = x
E.insertLast(y)
else { y > x }
G.insertLast(y)
return L, E, GCSI2510 68
Tri rapide - ArbreUne exécution du tri rapide est représentée par un arbre binaire:� Chaque nœud représente un appel récursif du tri rapide et
emmagasine:� La séquence non triée avant l'exécution et son pivot� La séquence triée à la fin de l'exécution
� La racine est l'appel initial� Les feuilles sont les appels sur les sous-séquences de taille 0 ou
1
7 4 9 6 2 →→→→ 2 4 6 7 9
4 2 →→→→ 2 4 7 9 →→→→ 7 9
2 →→→→ 2 9 →→→→ 9
68CSI2510 - Aut.09 - Tris recursifs
4 →→→→ 4 7 →→→→ 7
Recursive Sort 11/6/2013 12:56 PM
CSI2510 18
CSI2510 69
Sélection du pivot7 2 9 4 3 7 6 1
69CSI2510 - Aut.09 - Tris recursifs
Tri rapide – Exemple1
CSI2510 70
Partition, appel récursif, sélection du pivot
2 4 3 1
7 2 9 4 3 7 6 1
70CSI2510 - Aut.09 - Tris recursifs
Tri rapide – Exemple1
CSI2510 71
2 4 3 1
1 →→→→ 1
7 2 9 4 3 7 6 1
71CSI2510 - Aut.09 - Tris recursifs
Tri rapide – Exemple1
Partition, appel récursif, appel de base
CSI2510 72
7 2 9 4 3 7 6 1
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
4 →→→→ 4
72CSI2510 - Aut.09 - Tris recursifs
Tri rapide – Exemple1
Appel récursif,…, appel de base, joindre, joindre
Recursive Sort 11/6/2013 12:56 PM
CSI2510 19
CSI2510 73
7 9 7
7 2 9 4 3 7 6 1
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
4 →→→→ 4
73CSI2510 - Aut.09 - Tris recursifs
Tri rapide – Exemple1
Partition, appel récursif,…, appel de base
CSI2510 74
Partition, …, appel récursif, appel de base
7 9 7
7 2 9 4 3 7 6 1
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
3 →→→→ 3 4 →→→→ 4
9 →→→→ 9
74CSI2510 - Aut.09 - Tris recursifs
Tri rapide – Exemple1
CSI2510 75
Joindre, joindre
7 9 7 →→→→ 7 7 9
7 2 9 4 3 7 6 1 →→→→ 1 2 3 4 6 7 7 9
2 4 3 1 →→→→ 1 2 3 4
1 →→→→ 1 4 3 →→→→ 3 4
3 →→→→ 3 4 →→→→ 4
9 →→→→ 9
75CSI2510 - Aut.09 - Tris recursifs
Tri rapide – Exemple1
CSI2510 76
Pire de cas : temps d'exécution Le pire de cas pour le tri rapide arrive quand le pivot est l’élément unique minimum ou maximum Un des ensembles L et G a la taille n − 1 et l'autre a la taille 0Le temps d’exécution est proportionnel à la somme
n + (n − 1) + … + 2 + 1Alors, dans le pire des cas, le temps d'exécution du tri rapide est O(n2)
profondeur temps
0 n
1 n − 1
… …
n − 1 1
Recursive Sort 11/6/2013 12:56 PM
CSI2510 20
CSI2510 77
Temps moyen d'exécutionConsidérer un appel récursive au tri
rapide sur une séquence de taille s. Soit:
� Pour la moitié des appels: la taille de Let G est inférieure à 3s/4
� Pour l’autre moitié: soit L ou G a une taille plus grande que 3s/4
En moyenne, chaque niveau i traitera une séquence de taille (3/4)i/2n
Le dernier niveau est atteint lorsque (3/4)i/2n = 1. C’est-à-dire i=2log4/3n
La hauteur de l’arbre est donc O(log n)
s(r)
s(a) s(b)
s(c) s(d) s(f)s(e)
time per levelexpected height
O(log n)
O(n)
O(n)
O(n)
total expected time: O(n log n)
CSI2510 78
Temps prévu d'exécutionAinsi, nous avons� La hauteur prévue de l'arbre de tri
rapide est O(log n)
� La quantité de travail total fait aux nœuds de même profondeur de l'arbre de tri rapide est O(n)
� Ainsi, le temps prévu d’exécution est O(n log n)
s(r)
s(a) s(b)
s(c) s(d) s(f)s(e)
time per levelexpected height
O(log n)
O(n)
O(n)
O(n)
total expected time: O(n log n)
CSI2510 79
Dans l'étape de partition, nous utilisons des opérations de remplacement pour réarranger les éléments des séquences d’entrées tel que� les éléments plus petits que le pivot ont des rangs plus
petit que h� les éléments égaux au pivot ont des rangs entre h et k� les éléments plus grands que le pivot ont des rangs plus
grand que kLes appels récursifs considèrent� les éléments avec un rang plus petit que h� les éléments avec un rang plus grand que k
Tri rapide sur place
CSI2510 80
Étape 1 pour Diviser: l scrute la séquence de la gauche, et r de la droite
Un échange est exécuté quand l est à un élément plus grand que le pivot et r est à un élément plus petit que le pivot.
Tri rapide sur place
Recursive Sort 11/6/2013 12:56 PM
CSI2510 21
CSI2510 81
Un échange final avec le pivot complète l’étape pour Diviser
Tri rapide sur place
CSI2510 82
Algorithm inPlacePartition(p,s,e)
Entrées: position p du pivot; s et e sont les limites dans la séquence
Sorties: l et r tel que : r-1=indice du dernier élément plus petit que le pivot
l+1=indice du premier élément plus grand que le pivot
l ← s, r ← e-1
swap S[p] with S[e], p ← e
while l ≤ r
while S[l] < S[p] and r > l
l ← l+1
while S[r] > S[p] and r > l
r ← r-1
if r > l swap S[r] with S[l]
swap S[l] with S[p]
return r,l
On partitionne la séquence en utilisant deux indices pour la décomposer en L,E et G
Répéter jusqu'à ce que l et r se croisent:� l parcourt le tableau de
gauche à droite jusqu’à trouver un élément ≥ le pivot
� r parcourt le tableau de droite à gauche jusqu’à trouver un élément < le pivot
� Échanger les éléments d’indices l et r
Tri rapide sur place
CSI2510 83
Algorithm inPlaceQuickSort(S, l, r)
Entrées séquence S, rangs l et r
Sortirs séquence S avec les éléments des rangs entre l et rréarrangés dans l'ordre croissant
if l ≥ r
return
i ← entier aleatoire entre l et r
x ← S.elemAtRank(i)
(h, k) ← inPlacePartition(i,l,r)
inPlaceQuickSort(S, l, h − 1)
inPlaceQuickSort(S, k + 1, r)
Tri rapide sur place
CSI2510 84
Algorithm Time NotesTri par
sélectionO(n2)
tous les cas
sur-placelent (acceptable avec peu de
données)
Tri par insertion
O(n2)
pire et moyen
sur-placelent (acceptable avec peu de
données)
Tri rapideO(n2) au pire
O(n log n)
en moyenne
sur-place, partition trèssimple
le plus rapide (bon avec un grand nombre d’entrées)
Tri par monceau
O(n log n)
tous les cas
sur-placerapide (bon avec un grand
nombre d’entrées)
Tri fusionO(n log n)
tous les cas
accès séquentiel(distribuées)
fast (bon avec un très grand nombre d’entrées)