Tri à bulles - Problème
Les Galériennes de l'Info
-
Les Galériennes de l'Info -
Les Galériennes de l'Info -
Bonjour à tous, :)
On doit faire un programme de tri à bulles. Le programme n'a pas d'erreur mais le résultat n'est pas bon et nous ne savons pas pourquoi. Le programme a été écrit sur Visual Studio en C++. Pouvez-vous nous aider ? Merci d'avance :)
On doit faire un programme de tri à bulles. Le programme n'a pas d'erreur mais le résultat n'est pas bon et nous ne savons pas pourquoi. Le programme a été écrit sur Visual Studio en C++. Pouvez-vous nous aider ? Merci d'avance :)
#include <stdio.h> #define MAX 100 void tri_bulle(float tabi[MAX], int nb) { int fin_tri; float nb_swap=0; int i=0; do { fin_tri = 1; for (i = 0; i < (nb+1) ; i++) { if (tabi[i] > tabi[i + 1]) { nb_swap = tabi[i]; tabi[i] = tabi[i + 1]; tabi[i + 1] = nb_swap; fin_tri = 0; } } } while (fin_tri == 0); } void main(void) { float tabi[MAX]; int nb; int i=0; do { printf("Combien de prix, entre 0 et 100, voulez-vous rentrer dans le tableau ?"); scanf("%d", &nb); } while (nb < 0 || nb>100); for (i = 0; i < nb; i++) { printf("Rentrez le %d prix :\n", i + 1); scanf("%f", &tabi[i]); } tri_bulle(tabi,nb); printf("Le tableau trié par ordre croissant est donc \n"); for (i = 0; i < nb; i++) { printf(" %f | ", tabi[i]); } }
A voir également:
- Tri à bulles - Problème
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Tri turf - Télécharger - Sport
- Votre colis est retenu au centre de tri - Accueil - Arnaque
- En cours de traitement sur le site de tri local - Forum Consommation & Internet
2 réponses
Salut,
Tu n as que la moitié dans ton code: tu regarde n par rapport à n+1, mais après il est ignoré (quand n=n+1, le check se limite entre n+1 et n+2 => pas de check sur le n initial).
tu pourrai rajouter, par exemple:
si qui ordonnera le tout (je me rapel plus des codes exactes qui definissent les tri mais bref). C est juste un exempe que j ai tappé vite fait, donc a checker, mais ca te donnera une bonne idée de pourquoi ton code est insuffisant.
naga
EDIT: ah et tu auras un soucis avec
Tu n as que la moitié dans ton code: tu regarde n par rapport à n+1, mais après il est ignoré (quand n=n+1, le check se limite entre n+1 et n+2 => pas de check sur le n initial).
tu pourrai rajouter, par exemple:
if (tabi[i] > tabi[i + 1]) {
for(j=i+1;j>0 ; j++)
{
if( tab[j]<tab[j-1) {
nb_swap = tabi[j];
tabi[j] = tabi[j - 1];
tabi[j - 1] = nb_swap;
}
}
}
si qui ordonnera le tout (je me rapel plus des codes exactes qui definissent les tri mais bref). C est juste un exempe que j ai tappé vite fait, donc a checker, mais ca te donnera une bonne idée de pourquoi ton code est insuffisant.
naga
EDIT: ah et tu auras un soucis avec
i < (nb+1)dans le for de la fonction, mais je te laisse découvrir ^^(comme piste : penses au dernier indice du tableau et des indices utilisés pour les tests)
si je comprends bien le programme ne lit qu'une seule fois le tableau c'est ça ?
Et pour la boucle for, on a mis nb+1 car quand on compare la valeur nb il va y avoir un problème si on a pas de valeur au rang nb+1....
En l occurrance tu fais un passage qui fait "remonter" le plus grand mais c est tout, le reste est oublié.
pour le "+1", je dis pas juste que la manière dont tu as codé tu vas aller lire dans de la mémoire non alloué (ou qui n a rien a voir), car si tu as n éléments, le dernier indice est n-1