Correction TD 8 : Algorithmes de tri

publicité
Correction TD 8 :
Algorithmes de tri
Licence 1 MASS semestre 2, 2007/2008
Exercice 1 : Tester
On considère que le tri devrait être selon l’ordre croissant.
a- Algorithme Test(T : tableau d’entiers; n : entier) : booléen
début
variable i : entier
i←0
tant que i < n − 1 et T [i] ≤ T [i + 1] faire
i ← i+1
fin tant que
retourner i ≥ n − 1
fin
b- Algorithme Compter(T : tableau d’entiers; n : entier) : entier
début
variable i, c: entier
c←0
pour i de 0 à n − 2 faire
si T [i] > T [i + 1] alors
c ← c+1
fin si
fin pour
retourner c
fin
Exercice 2 : Nombre d’opérations
a- Pour effectuer k recherches dans un tableau non trié de taille n il faut
compter en moyenne kn
2 opérations.
b- Trier le tableau se fait en n log2 n auquel il faut ajouter la recherche dichotomique qui se fait en log2 n et qu’on doit faire k fois : (n + k) log2 n.
c- En moyenne il est donc plus intéressant de trier le tableau et de faire une
recherche dichotomique des que k ≥ log2 n.
1
Exercice 3 : Suppressions
a- On commence par chercher l’élément s à supprimer et ensuite on décale
les suivants.
Algorithme suppression(T : tableau d’entiers, s, k : entier) : entier
début
variable i, r : entier
r←0
tant que r ≤ k − 1 et T [r] 6= s faire
r ← r+1
fin tant que
si r > k − 1 alors
retourner k
sinon
pour i de r à k − 2 faire
T [i] ← T [i + 1]
fin pour
retourner k − 1
fin si
fin
b- Algorithme suppressionOrdonnée(T : tableau d’entiers, s, k : entier) :
entier
début
variable i, r, d : entier
r←0
tant que r ≤ k − 1 et T [r] ≤ s faire
si T [r] = s alors
d ← d+1
fin si
r ← r+1
fin tant que
si r > k − 1 et d = 0 alors
retourner k
sinon
pour i de r − d à k − 2 faire
T [i] ← T [i + d]
fin pour
retourner k − d
fin si
fin
Exercice 4 : Ordre décroissant
a- Algorithme triSélection(T : tableau d’entiers, n : entier) : rien
début
2
variable i, jM ax : entier
pour i de 0 à 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ébut
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ébut
variable i, iMax : entier
iMax ← k
pour i de k + 1 à n − 1 faire
si T [i] > T [iMax] alors
iMax ← i
fin si
fin pour
retourner iMax
fin
b- Algorithme triInsertion(T : tableau d’entiers, n : entier) : rien
début
variable i : entier
pour i de 1 à n − 1 faire
Insérer(T , i)
fin pour
fin
Algorithme insérer(T : tableau d’entiers, i : entier) : rien
début
variable j, x : entier
x ← T [i]
j ← i−1
tant que 0 ≤ j et x ≥ T [j] faire
T [j + 1] ← T [j]
j ← j−1
fin tant que
T [j + 1] ← x
fin
3
Téléchargement