[Pascal] Tri fusion

Tri fusion [Pascal] - Programmation

Marsh Posté le 19-05-2002 à 17:41:41    

J'ai un petit probleme sur cette procedure recursive. Ma procedure de fusion des tableaux est nickel, mais l'appel de tri doit merder car le tableau est pas trié correctement.
Voici la procedure d'appel de tri:
 
tab est le tableau, a et b en sont les bornes.
le premier appel est tri(tab,1,n) où n est la taille du tableau,entrée par l'utilisateur. Le tableau est rempli d'entiers aléatoires.

procedure tri(var tab:t_tab; a,b:integer);
          var med:integer;
begin
     med:=(a+b) div 2;
     if (med<>b) then
        begin
           tri(tab,a,med);
           tri(tab,med+1,b);
        end;      
 
     if a<b then
        fusiontab(tab,a,b);
end;

 
Vous pouvez pas me dire si vous voyez un tuc qui merde, parce que moi je sature là...?
 
(Oui, newbie inside, pas la peine de faire de remarque.)


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 19-05-2002 à 17:41:41   

Reply

Marsh Posté le 19-05-2002 à 17:44:51    

c une dichotomie ton truc là. C'est quoi le résultat?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-05-2002 à 17:48:39    

Le but est de trier un tableau d'entiers. Le principe est de faire une dichotomie du tableau jusqu'a obtenir des tableaux de 1 element. A ce niveau, on fusionne les tableaux 2 par 2 et on remonte jusqu'à obtenir le tableau initial trié. Je suis assez clair où il faut que je détaille ?
Le truc c'est que l'algo m'a l'air bon...mais il l'est pas :(


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 19-05-2002 à 17:55:17    

oui bin ca j'ai bien compris. Je te demande ce que trier [1,3,2,4] donne comme résultat.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-05-2002 à 18:05:59    

oups :o
 
Alors c'est là que ça devient louche: si on entre un tableau déjà trié, il est rendu trié aussi. Mais par ex 5 4 3 1 donne 1 4 5  3
 
96 13 5 10->10 13 96 5
74 35 50 36->35 36 74 50
97 11 24 26->11 26 97 24
 
qq exemples...


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 20-05-2002 à 03:27:49    

Je ne perds pas espoir...J'ai fait des tests sur une centaine de tableau (!!) et j'y vois un peu plus clair: il y a une erreur lorsque le terme le plus élevé se trouve dans la 1ere partie du tableau (ie dans 2 premiers pour un tableau à 4, 3 premiers pour un tableau à 5), et l'erreur consiste en ce que le 1er terme de la 2eme partie du tableau se retrouve toujours à la fin du tableau (mal) trié, alors que tous les autres elements sont bien placés.
Ceci dit, je ne suis pas des masses plus avancé :??:
Si quelqu'un peut m'aider...


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 20-05-2002 à 16:08:09    

Merci de votre aide (:p), j'y suis arrivé. Le truc c'est que c'était la fusion des tableaux qui merdait, pourtant elle avait l'air correcte, et marchait pour les tests sur cette fonction seule. C'est les compteurs du 1er tableau et du tableau final qui étaient initialisé à 1 et non pas à la borne inferieure du morceau de tableau.


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Sujets relatifs:

Leave a Replay

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