Tri des éléments d'un tableau

Tri des éléments d'un tableau - Ada - Programmation

Marsh Posté le 10-02-2009 à 22:49:53    

Bonjour,
 
J'ai trouvé une fonction visant à trier par ordre croissant les éléments d'un tableau:
 

Code :
  1. FUNCTION Tri_Croissant(T_User: Tableau) RETURN Tableau IS;
  2.  
  3.       T: Tableau := T_User;
  4.       Continuer : Boolean := True;
  5.       Aux: Natural;
  6.      
  7.    BEGIN
  8.      
  9.       WHILE (Continuer = True) LOOP
  10.        
  11.          Continuer := False;
  12.        
  13.          FOR I IN T'First..(T'Last -1) LOOP
  14.            
  15.             IF (T(I) > T(I+1)) THEN
  16.              
  17.                Continuer := True;
  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.       RETURN T;
  30.      
  31.       end Tri_Croissant;


 
Je ne comprends pas tout: d'une part, je ne vois pas à quoi sert d'introduire la variable booléenne Continuer, je ne vois ni l'utilité qu'elle a dans la fonction, ni la façon dont on procède pour la faire passer de True à False. D'autre part, mais cela reste très lié au point précédent, il me semble que je n'aurai pas inclus la boucle while.. à quoi sert-elle? Enfin, pourquoi n'y-a-t-il pas de else pour faire suite à if?
 
Merci d'avance!

Reply

Marsh Posté le 10-02-2009 à 22:49:53   

Reply

Marsh Posté le 23-07-2009 à 20:55:18    

dj_titeuf a écrit :

Je ne comprends pas tout: d'une part, je ne vois pas à quoi sert d'introduire la variable booléenne Continuer,


Elle sert à savoir si on a fini de trier la liste ou si on doit encore continiuer à la trier (voir plus loin)
 

dj_titeuf a écrit :

je ne vois ni l'utilité qu'elle a dans la fonction, ni la façon dont on procède pour la faire passer de True à False.


Comme tu le vois, elle est fixée à True lorsque lors du parcours de la liste, est trouvé un élément à la position i, qui est plus grand que l'élément à la position i+1. C'est à dire que la variable est fixée à True, dès qu'une condition indiquant que la liste n'est pas ordonnée est rencontrée.
 
En d'autres termes, tant que la liste n'est pas entièrement triée, on continue à la trier.  ;)  
 

dj_titeuf a écrit :

D'autre part, mais cela reste très lié au point précédent, il me semble que je n'aurai pas inclus la boucle while.. à quoi sert-elle? Enfin, pourquoi n'y-a-t-il pas de else pour faire suite à if?


La boucle interne “ for ” sert à tester la liste et à permuter ses élément. La boucle “ for ” ne fait qu'un seul passage, et il est rare que la liste soit triée à la suite d'un seul passage.
 
Le plus souvent il en faudra plusieurs. C'est le rôle de la boucle “ while ” qui est executée tant que la liste n'est pas triée.
 
En résumé, l'idée de cette algorithme qui est surtout à vocation pédagogique est la suivante : tant que la liste n'est pas triée, inspecter tous les éléments de la liste tout en testant s'ils sont ordonnés, et si on rencontre deux élément non-ordonnés, on les permute (on les interverti).
 
Ou encore, en pseudo code à la sauce Ada :
 
Boucle_1: While non-trié
   Boucle_2: Sur tous les éléments du début à la fin
      Comparer un élément et l'élément suivant
      Si l'élément est plus grand que l'élément suivant alors
         On indique que la liste n'est toujours pas triée
         On permute les deux élément de sorte qu'il soit maintenant ordonnés
   end Boucle_2;
end Boucle_1;
 
 
À bientôt peut-être
 
Y.


Message édité par Hibou57 le 23-07-2009 à 21:00:55
Reply

Sujets relatifs:

Leave a Replay

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