Exercice — dans l'esprit des sujets d'informatique
On dispose d'un tableau T[1..N] d'entiers. On veut le trier dans l'ordre croissant par une procédure TRIER (tri à bulles avec drapeau).
- Écrire l'algorithme de
TRIER(T, N): boucleRépéter…Jusqu'à, drapeauEchange, boucle internePour i de 1 à n-1, permutation siT[i] > T[i+1], puisn ← n-1. - Pourquoi réduit-on
naprès chaque passe ? Quel est l'effet sur le nombre de comparaisons ? - Appliquer une passe sur
T = [4, 1, 3, 2]: donner le tableau après la première passe et la valeur deEchange.
Voir la correction commentéeAprès avoir posé votre démarche
1. Procédure.DEF PROC TRIER (VAR T : VECT ; N : ENTIER)
Variables i, Aux, n : entier ; Echange : booléen
Début
n ← N
Répéter
Echange ← faux
Pour i de 1 à n-1 faire
Si T[i] > T[i+1] alors
Aux ← T[i] ; T[i] ← T[i+1] ; T[i+1] ← Aux
Echange ← vrai
FinSi
FinPour
n ← n-1
Jusqu'à (n = 1) ou (Echange = faux)
Fin
2. Après une passe, le plus grand élément restant est en position n : il est déjà bien placé. On exclut cet indice des prochaines comparaisons → complexité au pire toujours , mais moins de paires testées à chaque tour.
3. Paires : (4,1)→échange [1,4,3,2] ; (4,3)→[1,3,4,2] ; (4,2)→[1,3,2,4]. Echange = vrai. Le tri à bulles a fait flotter le 4 en fin de tableau.