Téléchargement
illégal
Posez votre question Signaler

Tri bulle d'un tableau a n dimension

mimoonet 9Messages postés 24 janvier 2009Date d'inscription - Dernière réponse le 24 janv. 2009 à 19:03
Bien le bonjour amis programmeur, je vous énonce un problème qui ma été demander a mon cours de programmation C, avant tout de chose je ne vous demande pas de résoudre l'entièreté du programme mais bien de m'aider a comprendre mes fautes.
Donc, comme le titre l'indique, je dois trier un tableau 3x3 avec le tri bulle (le tri le moin répandu mais faut bien commencer avec un tri ^^ ).
voici mon code :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int tab[10][10];
int i,j; // indice de ligne et de colonne du tableau
int n,m; // nombre de ligne et de colonne du tableau
int tmp; // variable temporaire
srand((unsigned)time(0));
printf("Nombre de ligne du tableau (max10) : ");
scanf("%d",&n);
printf("Nombre de colonne du tableau (max10) : ");
scanf("%d",&m);
for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
tab[i][j]=rand()%50;
}
}
puts("");
// Affichage non trier
for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
printf("%d \t",tab[i][j]);
}
puts("");
}puts("");
// tri bulle
for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
if(tab[i][j] > tab[i][j+1])
{
tmp=tab[i][j];
tab[i][j]=tab[i][j+1];
tab[i][j+1]=tmp;
}
}
}
puts("\n");
// affichage trier
for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
printf("%d \t",tab[i][j]);
}
puts("");
}puts("");
}
#### Dans un premier temps j'aimerai bien résoudre le problème suivant :
a l'affichage du tableau "trier" les 3 colonne prenne des valeurs incorrecte "-8389832".
Sauriez vous me dire pourquoi ?
Je ne veux pas la solution complète a mon programme, je préféré poser mes questions au fur et a mesure. merci.
Lire la suite 

Tri bulle d'un tableau a n dimension »

14 réponses
Réponse
+1
moins plus
Dernier soucis a résoudre et puis j'ai clôturer ce programme.

soit le tableau 2x3

9 3 0
3 6 4

deviend

0 3 9
3 4 6

et devrai donner
0 3 3
4 6 9

pour pouvoir faire ça, je dois ajouter une condition dans la première boucle ? ou je dois implémenter une nouvelle boucle for au sommet des 2 autres ?
Ajouter un commentaire
Réponse
+1
moins plus
D'ailleurs, j'ai mal regardé mais ton algorithme n'est pas bon.
Il te manque une boucle for allant de i à m.
Tu devrais vraiment lire l'article que je t'ai donné pour voir comment ça marche pour un tableau une ligne. Ca t'aidera à le faire sur une matrice.
Quand je dis que tu devrais passer par un tableau simple, ça veut pas dire utiliser forcément un autre tableau. Mais plutôt considérer ta matrice comme un tableau simple. Par exemple :
int tab[3][3]; 
for(int i=0;i<9;i++) 
         printf("%d ",tab[0][i]);
Ajouter un commentaire
Réponse
+0
moins plus
Je suis désoler pour l'affichage du code, si il y a moyen de vous envoyer mon code source je le ferai volontiers car il n'est pas des plus lisible. J'espère seulement que les erreurs seront plus lisible x)
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Avant de mettre ton code fait clic sur le bouton
 <> 
qui est à côté de G I S et tu verras que <code></code > est inséré
Tu n'as qu'à mettre ton code entre les balises
Ajouter un commentaire
Réponse
+0
moins plus
Re,

Sinon tu as un exemple de tri à bulle ici http://www.commentcamarche.net/forum/affich 4795788 c tri#2
Ajouter un commentaire
Réponse
+0
moins plus
Je vais adapter ton lien avec mon programme.

Je n'ai pas sur modifier mon message, donc je n'ai pas su modifier la lisibilité de mon code, je le saurai a l'avenir :)
je te tiens au courant si j'ai d'autre soucis.
merci a toi.

(désoler pour le double poste concernant le tri d'un tableau).
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
Dans la partie "tri à bulle", tu fais deux boucles for. j varie de 0 à m.
Et pourtant tu mets :
if(tab[i][j] > tab[i][j+1]).
L'indice j+1 aura pour valeur m+1 lors de la dernière itération. D'où une valeur bidon qui apparaît dans ton tableau.
cdlt
Ajouter un commentaire
Réponse
+0
moins plus
mais je ne vois pas ce que je dois mettre d'autre, car je dois bien tester
le premier élément avec le deuxième éléments soit :

tab[i][j] > tab[i][j+1]

peut tu m'aider que je puisse avancer ? car je dois encore régler le problème pour trier les élément des autres colonnes -_- ça vas faire 3 heure que je suis sur mon problème...
Ajouter un commentaire
Réponse
+0
moins plus
Ta boucle tu l'arrêtes à m-1 ;).
D'ailleurs la complexité de ton algorithme est en N² dans tous les cas. Tu peux le rendre meilleur via des petites optimisations : http://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles (tu trouveras l'algorithme, et aussi le code).
Ajouter un commentaire
Réponse
+0
moins plus
Ça fonctionne merci beaucoup ^^
je vais continuer le reste du programme.
Ajouter un commentaire
Réponse
+0
moins plus
C'est normal. Tu fais une comparaison par ligne et non l'ensemble de la matrice.
Tu devrais passer par un tableau simple, sinon cela va compliquer ton algorithme.
Ajouter un commentaire
Réponse
+0
moins plus
mhhh,
le soucis c'est que je dois trie un tableau sans passer par un autre...

je commence a désespérer.
Ajouter un commentaire
Réponse
+0
moins plus
ok, je regarderai ca demain, j'ai eut ma dose de C pour ajrd ^^ je passe a l'asm -_- mouarf, j'irai voir plus en détail le lien que tu ma donner, encore merci pour les infos.
Ajouter un commentaire
Réponse
+0
moins plus
J'ai encore été voir le lien que tu ma conseiller, mais j'ai du mal a assimiler les booléen, en n'en a malheureusement pas fait en classe : / ...

holala.
Ajouter un commentaire
Ce document intitulé « Tri bulle d'un tableau a n dimension » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?