Petit problème avec mon algo de tri ! - C++ - Programmation
Marsh Posté le 13-12-2007 à 01:15:31
Heu, alors en survolant ton algo.
1. void tri_tas(int tas[], int debut, int fin)
2. {
3. int i;
4. int taille = fin;
Ici, taille ne sera jamais égal à zéro car toujours >= 1, à moins d'avoir un seul élément. i ne peut pas être égal à zéro à cause de (i>0).
5.
6. for(i=taille/2; i>0; i--)
7. {
8. arranger(tas, i, taille);
9. }
10.
11. echanger(tas, taille, 1);
12. taille--;
13. i=1;
14.
Si taille était égal à zéro, on ne passe pas dans la boucle, parce (1 <= 0) <=> false
15. while(i<=taille/2)
16. {
17. arranger(tas, i, taille);
18. echanger(tas, taille, 1);
19. taille--;
20. }
21. }
De plus i a l'air constant dans ta boucle donc c'est équivalent à écrire.
# while(1<=taille/2)
# {
# arranger(tas, 1, taille);
# echanger(tas, taille, 1);
# taille--;
# }
# }
Donc, en gros tes fonctions arranger et échanger ne prennent jamais pour argument 0, donc le premier élément. Cela peut-être le problème à moins que tu effectues des modifcations à i - 1 dans ces fonctions, mais j'ai pas envie de vérifier.
Marsh Posté le 13-12-2007 à 14:40:43
Merci, pour tes remarques, je commence à voir la solution.
Mon tableau possède "fin"+1 case et les données sont stockées dans les cases de 1 à "fin"+1, donc "fin" données.
Marsh Posté le 12-12-2007 à 22:50:43
Bonjeoir !
Mon algo de tri par tas ne fonctionne pas à 100%: le début du tas n'est pas bien trié et je ne comprends toujours pas pourquoi après y avoir passé 2h dessus !
La fonction "échanger" échange les 2 éléments dans le tableau tas.
Le code n'est pas commenté mais il n'est pas long, et pas dur je pense (je débute là dedans).
Exemple d'execution avec un tableau aléatoire de 20 éléments en entrée (le bon tri est le premier) :
Le 19 est parti je ne sais pas où et j'ai des 0 qui apparaissent...
Des idées ?
Au passage, si vous avez des remarques sur la façons de programmer ça, je suis preneur, je début en C++.
Merci d'avance !
Message édité par Fused le 12-12-2007 à 23:00:15