Tri par sélection

Résolu
elfront37 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 Elfront37 -
Bonjour,
J'ai un devoir à faire sur le language C. Je dois trier un tableau de 100 entiers par sélection. Le seul soucis, c'est qu'au moment de trier les valeurs, la première valeur saisie par l'utilisateur n'est pas triée, je suis complétement bloqué, est ce que quelqu'un pourrait m'aider svp ? =)

Voici le programme :

#include <stdio.h>
void main(void)
{
 int tab[100];
 int dim,rang,i,perm,positionmax;  
                                                                                                                                                                                                                 
 printf("Entrez la dimension du tableau : \n");
 scanf("%d", &dim );
 if(dim>100) 
 {
  printf("Dimension impossible \n");
  }else{

  for (i=0; i<dim; i++)
   {
    printf("Entrez la valeur %d : \n", i);
   scanf("%d", &tab[i]);
  }

   printf("Voici le tableau :\n");
   for (i=0; i<dim; i++)
    {
     printf("%d ", tab[i]);
     printf("\n");
     }
   for (rang=0; rang<dim-1; rang++)
     {
      positionmax=dim;
      for (i=rang+1; i<dim; i++)
{
          if (tab[i]>tab[positionmax]) positionmax=i;
{
     
      perm=tab[i];
      tab[i]=tab[positionmax];
      tab[positionmax]=perm;
}
}
 }
 
 printf("Le tableau trie est :\n");
 for (i=0; i<dim; i++)
{
     printf("%d ", tab[i]);
 printf("\n");
}
}
}

1 réponse

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,
En effet l'élément tab[0] n'est jamais comparé, il ne sera pas trié.
D'autre part positionmax est initialisé à dim, ce qui fait faire des comparaisons avec tab[dim] qui est au delà de la fin!
La ligne if (tab[i]>tab[positionmax]) positionmax=i; est suivi d'une accolade comme si on 'hésitait' entre deux choses à faire.
Je te propose de
remplacer positionmax = dim; par positionmax = rang;
remplacer if (tab[i]>tab[positionmax]) positionmax=i; { ... par if (tab[i]<tab[positionmax]) { ...
0
Elfront37
 
Merci beaucoup Dalfab, le programme fonctionne correctement !! ;)
0