Programme Tri à Bulle

Messages postés
3
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
30 mai 2008
- - Dernière réponse : cs_jfrancois
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
- 30 mai 2008 à 22:09
Bonjour,
J'ai fait ce programme en cours, c'est un tri a bulle
qui tri des valeur donc 2à2, mais le programme ne fonctionne pas. Pouvez vous me dire ce qui ne fonctionne pas.

#include <stdio.h>

// Fonction Tri

int tri(int tab[], int size)
{
int j;
int k;
int inter;
k=1;
j=0;
inter=0;

while(tab[j]>tab[k])
{
inter=tab[j];
tab[k]=tab[j];
tab[k]=inter;
j++;
k++;
}
return tab;
}

// Fonction Principale
int main()
{
int tab[50];
int i;
int size;
int valeur;
i=0;

printf("Choisir le nombre de valeur du tableau \n");
scanf("%d",&size);

printf("Rentrer une valeur \n");
scanf("%d",&valeur);
tab[i]=valeur;
for(i=1;i<size;i++)
{
printf("Rentrer une valeur \n");
scanf("%d",&valeur);
tab[i]=valeur;
}
tri(tab,size);
i=0;
printf("Tableau trié\n");
for(i=0;i<size;i++);
{
valeur=tab[i];
printf("%d \n",valeur);
}
}

Merci
Afficher la suite 

6 réponses

Messages postés
111
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
5 août 2011
1
0
Merci
Bonjour,

while(tab[j]>tab[k])
{
inter= tab[j];
tab[k]=tab[j];   ->
tab[j]=tab[k];


tab[k] =inter;
j++;
k++;
}
Commenter la réponse de JejeLand
Messages postés
3
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
30 mai 2008
0
Merci
Merci pour ton aide, je n'avais pas vu cette erreur, mais cela ne fonctionne toujours pas, le terminal m'affiche :

Tableau trié
-1208035676
Commenter la réponse de tivanbelle
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
0
Merci
Salut


Le tri bulle n'est pas un algorithme tres complique mais il est quand meme plus compliquer que celui que tu proposes.


Imagine un tableau suivant:  5, 4, 3


Tu echangeras le 5 et 4 puis le 5 et 3, ce qui te donne 4, 3, 5  !!!


Regarde sur ce lien pour un exemple qui marche:
http://www.dailly.info/algorithmes-de-tri/bulle.php




A+
Mon site internet : http://pistol.petesampras.free.fr
Commenter la réponse de Pistol_Pete
Messages postés
3
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
30 mai 2008
0
Merci
D'accord pour la fontcion tri a bulle, mais je ne comprend pas pourquoi il m'affiche -1208035676 et pourquoi il ne m'affiche pas le tableau ?
Commenter la réponse de tivanbelle
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
0
Merci
Tout simplement parce qur tu passes ton temps, dans la fonction tri a ecrire et lire hors du tableau.

Trouves tu normale de passer la variable size en parametre et ne pas s'en servir?

A+
Mon site internet : http://pistol.petesampras.free.fr
Commenter la réponse de Pistol_Pete
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
0
Merci
Bonsoir,

Voilà un tri à bulle correct avec les 2 optimisations possibles :
1) A chaque itération de la boucle while(1) on s'arrête une valeur plus tôt (--max;) car chaque passage déplace le plus grand élément à la fin.
2) Si aucun échange n'a été réalisé au cours d'une itération de la boucle while(1) alors le tri est terminé et on peut quitter (variable fin).

J'ai aussi simplifier et corrigé le main() (le ; derrière le for de la boucle de visualisation !).

#include <stdio.h>






// ============
// Tri à bulles
// ============
void Trier(int tab[],int size)
{
   int i,j,max,swap,fin;



   max = size - 1;
   while (1)
   {
      fin = 1;
      for (i=0,j=1 ; i<max ; ++i,++j)
      {
         if (tab[i] > tab[j])
         {
            // --- Permuter les 2 valeurs i et j
            swap   = tab[i];
            tab[i] = tab[j];
            tab[j] = swap;
            fin    = 0;
         }
      }
      if (fin == 1) return; // tri terminé
      --max; // la dernière valeur est à sa place
   }
}






// ===================
// Fonction principale
// ===================
int main(void)
{
   int tab[50];
   int size;
   int i;




   // --- Saisir la taille du tableau
   printf("Choisir le nombre de valeur du tableau : ");
   scanf("%d",&size);
   if (size > 50) size = 50;




   // --- Saisir les valeurs du tableau
   for(i=0 ; i<size ; ++i)
   {
      printf("Rentrer la valeur %d : ",i + 1);
      scanf("%d",&tab[i]);
   }




   // --- Voir le contenu du tableau
   printf("\nTableau saisi : \n");
   for(i=0 ; i<size ; ++i)
      printf("- %d \n",tab[i]);




   // --- Trier le tableau
   Trier(tab,size);




   // --- Voir le contenu du tableau
   printf("\nTableau trie : \n");
   for(i=0 ; i<size ; ++i)
      printf("- %d \n",tab[i]);



   return 0;
}


Ce qui donne :

Choisir le nombre de valeur du tableau : 7
Rentrer la valeur 1 : 123
Rentrer la valeur 2 : 213
Rentrer la valeur 3 : 321
Rentrer la valeur 4 : 567
Rentrer la valeur 5 : 900
Rentrer la valeur 6 : 99
Rentrer la valeur 7 : 1001



Tableau saisi :
- 123
- 213
- 321
- 567
- 900
- 99
- 1001



Tableau trie :
- 99
- 123
- 213
- 321
- 567
- 900
- 1001




Jean-François
Commenter la réponse de cs_jfrancois