tivanbelle
Messages postés3Date d'inscriptionvendredi 30 mai 2008StatutMembreDernière intervention30 mai 2008
-
30 mai 2008 à 11:26
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDerniè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;
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 30 mai 2008 à 22:09
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