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