1
NF01
Algorithmes de tri
NF01
Problème
! Trier un tableau d éléments de même type
Le type des éléments doit être muni d une relation
d ordre
! Exemple
Avant : 8 12 5 35 21 3
Après : 3 5 8 12 21 35
! Algorithme (s) ?
NF01
Tri par sélection
! 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
NF01
Simulation
8 12 5 35 21 3
3 12 5 35 21 8
3 5 12 35 21 8
3 5 8 35 21 12
3 5 8 12 21 35
3 5 8 12 21 35
NF01
Algorithme ?
! Pour i allant de 1 à n-1
• Chercher le minimum
" dans la partie du tableau commençant à l’indice i
" (avec son indice)
• Permuter l’élément d’indice i avec le minimum
NF01
Algorithme
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
2
NF01
Tri par insertion
! Principe
• On considère qu une partie des éléments est
ordonnée
• On insère au bon endroit
NF01
Simulation
8 12 5 35 21 3
3 12 5 35 21 8
3 5 12 35 21 8
3 5 12 35 21 8
3 5 12 21 35 8
3 5 8 12 21 35
NF01
Algorithme
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
NF01
Tri par échange (tri à bulles)
! 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 12 5 35 21 3
8 5 12 21 3 35
5 8 12 3 21 35
5 8 3 12 21 35
5 3 8 12 21 35
3 5 8 12 21 35
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
NF01
Simulation
! Interstices
! http://interstices.info/jcms/c_6973/les-algorithmes-de-tri
NF01
Tri rapide
! Tri récursif
! 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
tri_rapide(t, premier, dernier)
début
si premier < dernier alors
i := partitionner(t,premier, dernier)
tri_rapide(t, premier, i - 1)
tri_rapide(t, i + 1, dernier)
fin si
fin
NF01
fonction Partitionner(T, premier, dernier)
i,j,v : entier
v ← T[dernier] { pivot }
i ← premier; j ← dernier-1
tant que i <= j faire
tant que i < dernier et T[i] <= v faire i ← i + 1
tant que j >= premier et T[j] >= v faire j ← j - 1
si i < j alors echanger T[i] et T[j]
fin tant que
T[dernier] ← T[i]
T[i] ← v
retourner i
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!