Correction TD 8 : Algorithmes de tri
Licence 1 MASS semestre 2, 2007/2008
Exercice 1 : Tester
On consid`ere que le tri devrait ˆetre selon l’ordre croissant.
a- Algorithme Test(T : tableau d’entiers;n: entier) : bool´een d´ebut
variable i: entier i←0
tant quei < n−1 etT[i]≤T[i+ 1]faire i←i+ 1
fin tant que retourneri≥n−1 fin
b- Algorithme Compter(T : tableau d’entiers;n: entier) : entier d´ebut
variable i,c: entier c←0
pouride 0`a n−2 faire siT[i]> T[i+ 1]alors
c←c+ 1 fin si fin pour retournerc fin
Exercice 2 : Nombre d’op´ erations
a- Pour effectuer k recherches dans un tableau non tri´e de taille n il faut compter en moyenne kn2 op´erations.
b- Trier le tableau se fait en nlog2n auquel il faut ajouter la recherche di- chotomique qui se fait en log2net qu’on doit fairekfois : (n+k) log2n.
c- En moyenne il est donc plus int´eressant de trier le tableau et de faire une recherche dichotomique des quek≥log2n.
1
Exercice 3 : Suppressions
a- On commence par chercher l’´el´ement s `a supprimer et ensuite on d´ecale les suivants.
Algorithme suppression(T : tableau d’entiers,s, k: entier) : entier d´ebut
variable i,r: entier r←0
tant quer≤k−1 etT[r]6=sfaire r←r+ 1
fin tant que sir > k−1 alors
retournerk sinon
pouride r`a k−2 faire T[i]←T[i+ 1]
fin pour
retournerk−1 fin si
fin
b- Algorithme suppressionOrdonn´ee(T : tableau d’entiers,s,k : entier) : entier
d´ebut
variable i,r, d: entier r←0
tant quer≤k−1etT[r]≤sfaire siT[r] =salors
d←d+ 1 fin si r←r+ 1 fin tant que
sir > k−1 etd= 0alors retournerk
sinon
pouride r−d`a k−2 faire T[i]←T[i+d]
fin pour
retournerk−d fin si
fin
Exercice 4 : Ordre d´ ecroissant
a- Algorithme triS´election(T : tableau d’entiers,n: entier) : rien d´ebut
2
variable i,jM ax: entier pouride 0`a n−2 faire
jM ax←indiceMax(T,n, i) Permuter(T,i,jMax) fin pour
fin
Algorithme Permuter(T : tableau d’entiers,i,j : entier) : rien d´ebut
variable x: entier x←T[i]
T[i]←T[j]
T[j]←x fin
Algorithme indiceMax(T : tableau d’entiers,n,k: entier) : entier d´ebut
variable i,iMax : entier iMax←k
pouride k+ 1`an−1faire siT[i]> T[iMax]alors
iMax←i fin si fin pour
retourneriMax fin
b- Algorithme triInsertion(T : tableau d’entiers,n: entier) : rien d´ebut
variable i: entier
pouride 1`a n−1 faire Ins´erer(T,i)
fin pour fin
Algorithme ins´erer(T : tableau d’entiers,i: entier) : rien d´ebut
variable j,x: entier x←T[i]
j ←i−1
tant que0≤j et x≥T[j]faire T[j+ 1]←T[j]
j ←j−1 fin tant que T[j+ 1]←x fin
3