1 Algorithmes de tri - UTC

publicité
Problème
Ø  Trier un tableau d éléments de même type
Algorithmes de tri
Le type des éléments doit être muni d une relation
d ordre
Ø  Exemple
Avant :
Après :
8 12 5 35 21 3
3 5 8 12 21 35
Ø  Algorithme (s) ?
NF01
NF01
Tri par sélection
Simulation
Ø  Principe
• 
• 
• 
• 
• 
• 
On suppose qu on connaît le nb d éléments n
On cherche le minimum
On le place en premier élément (on échange)
On cherche le minimum suivant
On le place en 2ème position
Et ainsi de suite
8
3
3
3
3
3
12 5 35 21 3
12 5 35 21 8
5 12 35 21 8
5 8 35 21 12
5 8 12 21 35
5 8 12 21 35
NF01
Algorithme ?
Algorithme
Ø  Pour i allant de 1 à n-1
• 
Chercher le minimum
ü 
ü 
• 
NF01
dans la partie du tableau commençant à l’indice i
(avec son indice)
Permuter l’élément d’indice i avec le minimum
NF01
pour i allant de 1 à n-1
min ← T[i]
indiceMin ← i
pour j allant de i+1 à n
si T[j] < min alors
min ← T[j]
indiceMin ← j
fin si
fin pour
Echanger T[i] et T[indiceMin]
fin pour
NF01
1
Tri par insertion
Simulation
Ø  Principe
• 
• 
On considère qu une partie des éléments est
ordonnée
On insère au bon endroit
8
3
3
3
3
3
12
12
5
5
5
5
5
5
12
12
12
8
35
35
35
35
21
12
21
21
21
21
35
21
3
8
8
8
8
35
NF01
NF01
Algorithme
Tri par échange (tri à bulles)
On cherche le min, on le met au début.
Pour i allant de 2 à n-1
elt ← T[i+1]
k ← i
tant que elt < T[k] faire {on décale à droite
T[k+1] ← T[k]
les éléments > = elt }
k ← k-1
fin tant que
T[k+1] ← elt
{on met elt au bon endroit}
fin pour
Ø  Principe
• 
On échange les éléments 2 à 2 en les réordonnant
=> Les éléments mal classés remontent dans la liste
comme des bulles à la surface d un liquide
Ø  Efficacité
•  Dépend du tableau initial
•  Efficace si le tableau est presque trié
NF01
Simulation
8
8
5
5
5
3
12
5
8
8
3
5
5
12
12
3
8
8
35
21
3
12
12
12
21
3
21
21
21
21
NF01
Algorithme
nbElts ← n
{nb elts restant à classer }
echange ← vrai {echange est vrai s il y a eu un echange}
tant que echange faire
echange ← faux
max ← nbelts
pour i allant de 1 à max-1 faire
si T[i] > T[i+1] alors
echanger T[i] et T[i+1]
echange ← vrai
nbelts ← i
fsi
fpour
ftq
3
35
35
35
35
35
NF01
NF01
2
Simulation
Tri rapide
Ø  Interstices
Ø  Tri récursif
Ø  http://interstices.info/jcms/c_6973/les-algorithmes-de-tri
Ø  Principe
On choisit une valeur pivot
On sépare dans le tableau les éléments inférieurs à
cette valeur et les éléments supérieurs
On trie ensuite chacune des deux parties du tableau
en suivant le même principe
NF01
Tri rapide
NF01
fonction Partitionner(T, premier, dernier)
i,j,v : entier
tri_rapide(t, premier, dernier)
v ← T[dernier]
début
{ pivot }
i ← premier; j ← dernier-1
si premier < dernier alors
tant que i <= j faire
i := partitionner(t,premier, dernier)
tant que i < dernier et T[i] <= v faire i ← i + 1
tri_rapide(t, premier, i - 1)
tant que j >= premier et T[j] >= v faire j ← j - 1
si i < j alors echanger T[i] et T[j]
tri_rapide(t, i + 1, dernier)
fin tant que
fin si
T[dernier] ← T[i]
fin
T[i] ← v
retourner i
NF01
NF01
3
Téléchargement