Tri fusion [Pascal] - Programmation
Marsh Posté le 19-05-2002 à 17:44:51
c une dichotomie ton truc là. C'est quoi le résultat?
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
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.
Marsh Posté le 19-05-2002 à 18:05:59
oups
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...
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...
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.
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...