Procédure de tri à bulles

Procédure de tri à bulles - Ada - Programmation

Marsh Posté le 02-03-2009 à 23:57:55    

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 :
  1. PROCEDURE Tri_Bulles(T: IN OUT Tableau) IS
  2.  
  3.    Aux: Integer;
  4.    Tri_Fini: Boolean;
  5.    Nbre_Passes: Natural :=0;
  6.  
  7. BEGIN
  8.  
  9.    WHILE NOT Tri_Fini LOOP
  10.      
  11.       Nbre_Passes := Nbre_Passes + 1;
  12.       Tri_Fini := True;
  13.      
  14.       FOR I IN T'First..T'Last-Nbre_Passes LOOP
  15.        
  16.          IF T(I) > T(I+1) THEN
  17.             Tri_Fini := False;
  18.            
  19.             Aux := T(I);
  20.             T(I) := T(I+1);
  21.             T(I+1) := Aux;
  22.            
  23.          END IF;
  24.        
  25.       END LOOP;
  26.      
  27.    END LOOP;
  28.      
  29. 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!

Reply

Marsh Posté le 02-03-2009 à 23:57:55   

Reply

Marsh Posté le 03-03-2009 à 00:19:07    

http://en.wikipedia.org/wiki/Bubble_sort


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-03-2009 à 09:13:05    


Un exemple simple => 1 - 10 -2 - 9 à trier
 
Essayons de Dérouler le programme
 
* 1ere passe  
 
tri_fini <- True
t(1) > t(2) => non ! 1 - 10 reste tel quel  
 
t(2) > t(3) => oui ! inversion 10 - 2 devient 2 - 10
tri_fini <- False
 
t(3) > t(4) => oui ! inversion 10 - 9 devient 9 - 10
tri_fini <- False
 
résultat 1ere passe donne 1 - 2 - 9 - 10
 
* 2eme passe  
 
tri_fini <- True
 
t(1) > t(2) => non ! 1 - 2 reste tel quel  
t(2) > t(3) => non ! 2 - 9 reste tel quel  
t(3) > t(4) => non ! 9 - 10 reste tel quel  
 
Fin de programme car pas de changement détecté donc tri OK
 
ça va mieux ?
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed