[pascal] tri d'une liste chainee

tri d'une liste chainee [pascal] - Delphi/Pascal - Programmation

Marsh Posté le 29-05-2002 à 23:48:20    

vous auriez pas une idée pour faire le tri d'une liste chainee suivant la valeur de l'un des champs ? Parce que celui que j'ai refuse de marcher :(
Si vous avez rien qu'une petie idée d'algo, ou un site où je peux en trouver (rien trouvé d'efficace pour le moment:(), merci de m'en faire part...


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

Marsh Posté le 29-05-2002 à 23:48:20   

Reply

Marsh Posté le 30-05-2002 à 10:45:58    

Sil vous plait...:bounce:

Reply

Marsh Posté le 30-05-2002 à 12:05:04    

Et non désolé c'est pas une solution a ton problème ce n'est qu'un  [:tomilou]

Reply

Marsh Posté le 30-05-2002 à 15:30:37    

:bounce:

Reply

Marsh Posté le 08-06-2002 à 18:13:20    

bah c'est pas possible dutiliser le contenu d'une variable pour identifier un champ si c'est que tu voulais. donc fo faire un "case of" dans le tri pour definir sur quel champ tu vas travailler. exemple :

case champ of
 1:begin
  valeur1 := courant^.champ1;
  valeur2 := courant^.suivant^.champ1;
 end;
end;

 
et puis ensuite tu compares valeur 1 et valeur 2 pour ton tri.


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 08-06-2002 à 19:34:50    

tri par le recherches des minimums successifs
 
action tri()
{
p,p_min : pointeurs
 
p<-tl
 
  tantque (p!=NULL) faire
  {
  p_min<-minimum(p);
  echanger(p,p_min);
  p<-suivant(p);
  }
 
}
 
module minimum(tl : pointeur): pointeur
{
p,p_min : pointeurs
p_min<-null
 
  tantque(p!=NULL)faire
  {
    si(valeur(p)<p_min)alors
    {
    p_min=p
    }
    p<-suivant(p)
  }
retourne p_min
}
 
module echanger (p1,p2: pointeur)
{
tempo:<type>
 
tempo<-valeur(p1);
 
affval(p1,valeur(p2))
affval(p2,tempo)
}


Message édité par corvincent le 06-08-2002 à 19:39:36
Reply

Marsh Posté le 11-06-2002 à 12:26:17    

merci mais c un peu tard...j'avais fini par trouver ça:
procedure tri(var liste:ptr_liste);

Code :
  1. var p,temp:ptr_liste;
  2.     i:integer;
  3. begin
  4.      if liste^.suiv<>NIL then
  5.         for i:=1 to compte(liste) do
  6.             begin
  7.                  p:=liste;
  8.                  if liste^.valeur>liste^.suiv^.valeur then
  9.                     begin
  10.                          temp:=liste;
  11.                          liste:=liste^.suiv;
  12.                          temp^.suiv:=liste^.suiv;
  13.                          liste^.suiv:=temp;
  14.                     end;
  15.                  while p^.suiv^.suiv<>NIL do
  16.                  begin
  17.                       if p^.suiv^.valeur>p^.suiv^.suiv^.valeur then
  18.                       begin
  19.                            temp:=p^.suiv;
  20.                            p^.suiv:=p^.suiv^.suiv;
  21.                            temp^.suiv:=p^.suiv^.suiv;
  22.                            p^.suiv^.suiv:=temp;
  23.                       end;
  24.                       p:=p^.suiv;
  25.                  end;
  26.             end;


---------------
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