Ma fonction ne trie pas le tableau

Résolu/Fermé
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 - 7 janv. 2011 à 23:53
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 janv. 2011 à 13:08
Bonjour,

J'ai écrit un petit programme en C qui trie un tableau. Le problème est que il y a des nombres redondant et d'autres ne sont plus dans le tableau après le tri... Voici le code :

void 
sort_tab(int* tab){
  //int taille = sizeof(tab)/sizeof(int);
 
  int taille = 10;
  int i, ind_min, courant;
  int min;
  
  for(courant=0; courant<taille; courant++){
    min = tab[courant];
    for(i=courant+1; i<taille; i++){
      if(tab[i]<min){
	min = tab[i];
	ind_min = i;
      }
    }
    tab[ind_min] = tab[courant];
    tab[courant] = min;
  }
}
 
void 
print_tab(int* tab){
  int j;
  for(j=0; j<10; j++)
    printf("%d |", tab[j]);
  printf("\n");
} 
 
int main(){
  int i, j, taille;
  //int toto[10] = {9, 1, 7, 2, 5, 3, 4, 6, 8, 0}; //TAB1
  int toto[10] = {2, 3, 4, 5, 6, 7, 8, 9, 0, 1}; //TAB2
  sort_tab(toto);
  print_tab(toto);
 
 
  return 0;
}


et voici le resultat :
pour TAB2 :
0 |1 |2 |3 |4 |5 |6 |7 |8 |8 |


pour TAB1 :
0 |1 |1 |2 |2 |3 |3 |4 |6 |8 |



J'aimerais savoir déjà d'ou vient ces redondances et pourquoi des nombres ont disparus ... ?

Merci d'avance pour votre aide.

2 réponses

j'ai corrigé ta fonction de tri; ça devrais marché
essaye avec ça
void sort_tab(int *tab , int taille){
  int temp;
  int i, j;

  for (i = 0; i < taille; i++)
    for (j = 0; j < taille; j++)
      if (tab[i] < tab[j])
      {
        temp = tab[i];
        tab[i] = tab[j];
        tab[j] = temp;
      }
}


et dans le main tu passe la taille de tes tableau en parametre en appelant sort_tab
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
8 janv. 2011 à 13:08
D'ailleurs, pour la deuxième boucle for, pas besoin de faire de 0 à taille, mais de 0 à i.

Cdlt,
0
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 1
8 janv. 2011 à 12:16
Merci pour ta réponse.
En fait j'ai juste oublié d'initialiser ind_min ... Maintenant ca fonctionne bien.
0