Tri des éléments d'un tableau - Ada - Programmation
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.
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:
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!