Insertion Sort (tableau)

Transcription

Insertion Sort (tableau)
Tris quadratiques
Révision
Tri par insertion
Tri par sélection
Tri à bulle (Bubble Sort)
CSI2510
1
Insertion Sort
(tableau)
0
1
2
3
i
2
4
6
8
10 15
5
trié
0
1
2
3
2
4
6
n
3
20
7
x
i
8
10 15
n
5
3
5
x
20
7
20
7
trié
0
1
2
3
2
4
5
CSI2510
CSI2510
i+1
6
trié
8
10 15
3
n
2
1
for (i=2; i=n, i++)
x ← A[i]
A[0] ← x
j ← i-1
while x.key < A[j].key
A[j+1] ← A[j]
j ← j-1
A[j+1] ← x
0
1
2
3
i
2
4
6
8
10 15
5
trié
n
3
20
7
x
CSI2510
Complexité
3
Insertion sort pour
tableaux
Comparaisons:
(Ci)min = 1
MIN
i=2..n
Cmin = n-1 = O(n)
(deja trié)
n
(Ci)max = i
MAX
Cmax =
i=2..n
i
i =2
(trié en ordre
invers)
= [n(n+1)/2] – 1
= O(n2)
Et avec une liste chaînée ?
CSI2510
CSI2510
4
2
Complexité
Insertion sort pour
tableaux
Nb. de déplacements et d’affectations
idem Nb. de comparaisons
Et avec une liste chaînée ?
CSI2510
5
CSI2510
6
Selection Sort
(tableaux)
CSI2510
3
Selection Sort
(tableaux)
1
2
i
3
5
6
15
n
8
Trie et ≤
des
autres
for (i=1; i= n-1, i++)
k ← i
x ← A[i]
for (j=i+1; j=n, j++)
if A[j].key < x.key
k ← j
x ← A[j]
A[k] ← A[i]
A[i] ← x
12 13 20
x
Chercher la plus petite clé
CSI2510
7
Complexité de Selection Sort
(tableau)
Nb. de comparaisons ne dépend pas de l’ordre des clés
n-1
C=
(n – i) = n(n – 1) – n(n – 1) / 2
i=1
= n(n – 1) / 2
= O(n2)
Et avec une liste chaînée ?
CSI2510
CSI2510
8
4
Complexité de Selection Sort
(tableau)
Nb. de d’affectations et de déplacements:
MIN
MAX
Tableau déjà trié
(Di)max = i (i=2..n)
(trié en ordre
inverse)
Dmin = n-1 =
O(n)
Dmax =
n "1
! (n " i )
i =1
=
O(n2)
CSI2510
9
Tri à bulle (Bubblesort)
Un algorithme de tri assez simple
Comme son nom l'indique, son principe consiste à
“faire remonter" les éléments jusqu'à leur bonne position
(comme des bulles d’air à la surface de l’eau)
On compare successivement les paires d’éléments adjacents
du tableau et on les permute si le premier est supérieur au second
CSI2510
CSI2510
10
5
Faire monter le plus grand
élément
Traverser une collection d’éléments


Parcourir le tableau du début vers la fin
Déplacer le plus grand élément vers la fin du tableau en
comparant les éléments deux par deux et en les
permutant si besoin
1
2
3
4
5
6
77
42
35
12
101
5
CSI2510
11
Faire monter le plus grand
élément
Traverser une collection d’éléments


Parcourir le tableau du début vers la fin
Déplacer le plus grand élément vers la fin du tableau en
comparant les éléments deux par deux et en les
permutant si besoin
1
2
42Swap
77
42
77
3
4
5
6
35
12
101
5
CSI2510
CSI2510
12
6
Faire monter le plus grand
élément
Traverser une collection d’éléments


Parcourir le tableau du début vers la fin
Déplacer le plus grand élément vers la fin du tableau en
comparant les éléments deux par deux et en les
permutant si besoin
1
42
2
3
35Swap35
77
77
4
5
6
12
101
5
CSI2510
13
Faire monter le plus grand
élément
Traverser une collection d’éléments


Parcourir le tableau du début vers la fin
Déplacer le plus grand élément vers la fin du tableau en
comparant les éléments deux par deux et en les
permutant si besoin
1
2
42
35
3
4
12Swap12
77
77
CSI2510
CSI2510
5
6
101
5
14
7
Faire monter le plus grand
élément
Traverser une collection d’éléments


Parcourir le tableau du début vers la fin
Déplacer le plus grand élément vers la fin du tableau en
comparant les éléments deux par deux et en les
permutant si besoin
1
2
3
4
5
6
42
35
12
77
101
5
Pas besoin de permuter
CSI2510
15
Faire monter le plus grand
élément
Traverser une collection d’éléments


Parcourir le tableau du début vers la fin
Déplacer le plus grand élément vers la fin du tableau en
comparant les éléments deux par deux et en les
permutant si besoin
1
2
3
4
42
35
12
77
CSI2510
CSI2510
5
6
5 Swap101
101
5
16
8
Faire monter le plus grand
élément
Traverser une collection d’éléments


Parcourir le tableau du début vers la fin
Déplacer le plus grand élément vers la fin du tableau en
comparant les éléments deux par deux et en les
permutant si besoin
1
2
3
4
5
6
42
35
12
77
5
101
Le plus grand élément est placé à la bonne position
CSI2510
17
Tri à bulles (Bubble sort)
Seul le plus grand élément est bien placé dans le tableau
Les autres éléments du tableau sont toujours en
désordre
Il faut « faire remonter » les autres éléments aux
bonnes positions  répéter la procédure
1
2
3
4
5
6
42
35
12
77
5
101
Le plus grand élément est placé à la bonne position
CSI2510
CSI2510
18
9
Tri à bulles (Bubble sort)
Si nous avons N éléments…
Et si chaque fois nous faisons remonter un élément
et nous le plaçons à la bonne position
Alors nous répétons la procédure “faire remonter”
N – 1 fois
C’est garanti que nous allons placer correctement
tous les N éléments après
CSI2510
19
N-1
Faire monter tout les éléments
1
42
2
35
3
12
4
77
5
5
6
101
1
35
2
12
3
42
4
5
5
77
6
101
1
12
3
5
3
35
4
42
5
77
6
101
1
12
2
35
2
5
4
42
5
77
6
101
1
5
2
12
3
35
4
42
5
77
6
101
CSI2510
CSI2510
20
10
Tri a bulles(tableau) - Complexité
Nb. de comparaisons (ne dépend pas de l’ordre):
C=
n "1
! (n " i )
= n(n – 1) – n(n – 1) / 2 = n(n – 1) / 2 = O(n2)
i =1
Nb. de déplacements et affectations:
Dmin = 0
Tableau dans l’ordre
Dmax= 3*C = O(n2)
Tableau dans l’ordre inverse
CSI2510
21
Tri a bulles(tableau)
Et si le tableau est déjà trié ?
Et si seulement quelques éléments ne sont pas en
ordre et après quelques déplacements le tableau
est trié ?
Nous voulons pouvoir détecter ceci et “arrêter
tôt” !
1
5
2
12
3
35
4
42
CSI2510
CSI2510
5
77
6
101
22
11
Tri a bulles(tableau)
Nous pouvons utiliser une variable booléenne pour
déterminer si n'importe quelle permutation est
arrivée pendant la dernière remontée d’élément
Si aucune permutation n’est arrivée, alors nous
savons que le tableau est déjà trié!
Ce booléen “flag” a besoin d'être remis à l'état
initial après chaque remontée d’élément
CSI2510
CSI2510
23
12