[C] Tri par insertion simple & pointeurs

Tri par insertion simple & pointeurs [C] - C - Programmation

Marsh Posté le 02-12-2005 à 11:00:39    

Bonjour à tous !
 
il m'a été donné un exercice à faire en C :  
traduire l'algo de tri par insertion simple en C avec et sans pointeurs, la version sans pointeurs marche tres bien, par contre j'ai un probleme pour celle avec les pointeurs :
 
Version sans pointeurs :  

Code :
  1. j=0;
  2.     x=0;
  3.    
  4.     while(j<nbel)
  5.     {
  6.         tmp=vec[j];
  7.         x=j-1;
  8.        
  9.         while(x>=0 && vec[x]>tmp)
  10.         {
  11.             vec[x+1]=vec[x];
  12.             x--;
  13.         }
  14.         vec[x+1]=tmp;
  15.         j++;
  16.     }


 
Version avec pointeurs  

Code :
  1. j=0;
  2.     x=0;
  3.     pvec=&vec[0];
  4.     pdeb=&vec[0];
  5.     while(j<nbel)
  6.     {
  7.         tmp=*pvec;
  8.         x=j-1;
  9.        
  10.         while(x>=0 && *(pdeb+x)>tmp)
  11.         {
  12.             *(pdeb+x+1)=*(pdeb+x);
  13.             x--;
  14.         }
  15.         *(pdeb+x+1)=tmp;
  16.        
  17.         *pvec++;
  18.         j++;
  19.     }


 
J'aimerai donc ne plus utiliser que le pointeur *pvec, meme si la version ci dessus fonctionne mais à mon avis il y a  moyen de faire mieux, et la je cale.
 
Merci de votre aide

Reply

Marsh Posté le 02-12-2005 à 11:00:39   

Reply

Marsh Posté le 02-12-2005 à 12:42:27    

Bonjour
je propose ceci (non testé)
j = 1;   /* le passage a 0 n'a aucun intéret */
while (j < nbel)
{
    pvec = vec + j;
    pdeb = pvec - 1;
    tmp = *pvec;
    while ((pvec != vec) && (*pdeb > tmp))
        *pvec-- = *pdeb--;
    *pvec = tmp;
    j++;
}
à tester

Reply

Marsh Posté le 02-12-2005 à 13:43:09    

En effet ton algo marche très bien, j ai du juste le modifier tres legerement pour qu'il entre en adéquation avec les consignes.
 
merci

Reply

Marsh Posté le 02-12-2005 à 16:24:09    

Le plus important est surtout de comprendre comment fonctionne les pointeurs.
ligne pvec != vec à comprendre
ligne *pvec-- = *pdeb-- à comprendre

Reply

Sujets relatifs:

Leave a Replay

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