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:
Code :
- 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;
|
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?
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!