Bonsoir,
Ayant vu en cours une procédure de tri à bulles que je n'ai pas bien comprise, je vous la poste, en espérant que vous pourrez m'éclairer quelque peu:
Dans cette situation, je ne parviens pas à faire "tourner" la procédure sur un exemple simple. Notamment, je ne comprends pas pourquoi Nbre_Passes := Nbre_Passes + 1 et Tri_Fini := True sont placés là où ils sont.. Pourriez-vous peut-être me détailler un peu comment les choses se passent sur un exemple? Par exemple sur le tableau (vecteur) 3741?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 PROCEDURE Tri_Bulles(T: IN OUT Tableau) IS Aux: Integer; Tri_Fini: Boolean; Nbre_Passes: Natural :=0; BEGIN WHILE NOT Tri_Fini LOOP Nbre_Passes := Nbre_Passes + 1; Tri_Fini := True; FOR I IN T'First..T'Last-Nbre_Passes LOOP IF T(I) > T(I+1) THEN Tri_Fini := False; Aux := T(I); T(I) := T(I+1); T(I+1) := Aux; END IF; END LOOP; END LOOP; END Tri_Bulles;
J'applique la procédure de tri à ce vecteur à 4 "composantes":
- Je rentre dans la boucle While;
- Dès lors, on a Nbre_passes qui se retrouve égal à 1! (0(valeur initiale) + 1) Pourquoi ne fait-on pas le cas Nbre_passes:= 0 dans la boucle? Vu qu'on commence à la valeur 1, on n'a jamais un parcours complet du tableau (de T'First à T'Last)! N'est-ce pas ennuyeux de ne pas accéder à la dernière case? Il me semble que si..
- Suite...?
Merci d'avance!
Partager