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 linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !