Tri par sélection

Résolu/Fermé
elfront37 Messages postés 1 Date d'inscription lundi 2 mai 2016 Statut Membre Dernière intervention 2 mai 2016 - Modifié par jipicy le 2/05/2016 à 17:53
 Elfront37 - 3 mai 2016 à 11:24
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
2 mai 2016 à 19:58
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
Merci beaucoup Dalfab, le programme fonctionne correctement !! ;)
0