Ma fonction ne trie pas le tableau

Résolu/Fermé
Signaler
Messages postés
242
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
5 décembre 2012
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
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
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
D'ailleurs, pour la deuxième boucle for, pas besoin de faire de 0 à taille, mais de 0 à i.

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