OrdonnerTableau

Fermé
debutantC - 19 janv. 2016 à 06:39
 debutantC - 27 janv. 2016 à 09:43
Bonjour, ma fonction ne marche pas, de l'aide !





int main()
{
int tableau[4]={10,15,3};
ordonnerTableau(tableau, 4);

int n=0;
for(n=0;n<4;n++)
{
printf("%d\n",tableau[n]);
}

return 0;
}


void ordonnerTableau(int tableau[], int taille)
{
int i=0,x=0;

for(i=0;i<taille-1;i++)
{
if(tableau[i]>tableau[i+1])
{
x=tableau[i];
tableau[i]=tableau[i+1];
tableau[i+1]=x;
}
}
}

5 réponses

je souhaite preciser sur ma fonction:
dans le boucle for,
quand i prend la valeur 0,

si tableau[0] est plus grand que tableau[1]:
x=tableau[0];
tableau[0]=tableau[1];
tableau[1]=x=la valeur initiale de tableau[0]

si tableau[0] est plus petit que tableau[1]:
on ne fait rien

etc pour i= i=2...
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
Modifié par [Dal] le 19/01/2016 à 10:20
Salut debutantC,

Si ton tableau a une taille de 4, tu devrais y mettre 4 valeurs (là le compilateur n'en a que 3, aussi il comble la valeur additionnelle avec un zéro).

Ensuite, ton algorithme de tri à bulle n'est pas terminé. Il faut repasser sur le tableau autant de fois que nécessaire pour vérifier si des permutations doivent être faites, et jusqu'à ce qu'aucune permutation ne soit plus nécessaire. Tous les éléments sont alors ordonnés.

Autrement dit, tu dois mettre la boucle for dans une autre boucle, pour la répéter tant que tout n'est pas trié, et ne sortir de la boucle que lorsque ta boucle for n'a aboutit à aucune permutation.


Dal
0
merci Dal pour la reponse

1. tableau de taille 4, la derniere case du tableau prend automatiquement la valeur 0

2. J ai ajoute un nouveau boucle pour repeter suffisament la comparaison

Par contre, j' ai un resultat 'bizarre':
10
3
0
15

=================

int main()
{
int tableau[4]={10,15,3};
ordonnerTableau(tableau, 4);

int n=0;
for(n=0;n<4;n++)
{
printf("%d\n",tableau[n]);
}

return 0;
}


void ordonnerTableau(int tableau[], int taille)
{
int i=0,j=0,x=0;

for(i=0;i<taille-1;i++)
{
for(j=0;j<taille-1;j++)
{
if(tableau[i]>tableau[i+1])
{
x=tableau[i];
tableau[i]=tableau[i+1];
tableau[i+1]=x;
}
}
}
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 19/01/2016 à 21:54
Bonjour,

Tu as inversé les boucles for...
Ensuite, tu fais trop d'itérations. La seconde a juste besoin d'aller de 0 à i à j.
Pour comprendre le principe du tri à bulles : https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles

Quelques commentaires sur le code :
int main()
Le bon prototype est : int main(void)

ordonnerTableau(tableau, 4);
for(n=0;n<4;n++)
Il vaut mieux mettre : sizeof tableau / sizeof *tableau à la place de 4 pour faciliter les évolutions. Tu peux aussi mettre sizeof tableau / sizeof *tableau dans une variable.

int n=0;
Pas terrible comme nom pour un compteur. Utilise plutôt i.

Pour les prochaines fois, merci de poster ton code entre 2 balises <code c>. Cela le rendra plus lisible.
Exemple :
<code c>
ici tu mets ton code
</code>
0
merci beaucoup fiddy pour le lien, tres utile pour optimiser l argorithme !!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
20 janv. 2016 à 22:23
Loin de mot l'idée de vouloir jouer sur les mots, mais le lien n'avait pas pour vocation d'optimiser l'algorithme mais de l'implémenter correctement.
Si tu veux optimiser l'algorithme de tri, je te conseille plutôt le tri rapide (quick sort) : https://fr.wikipedia.org/wiki/Tri_rapide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J ai enfin reussir! trop content !!!

<code c>
int main(int argc, char *argv[])
{
int tableau[4]={10,15,3,1};
ordonnerTableau(tableau, 4);


int a=0;
for(a=0;a<4;a++)
{
printf("%d\n",tableau[a]);
}


return 0;
}



void ordonnerTableau(int t[], int i)
{
int s = 1;
int j = 0;
int tmp = 0 ;
while((i>0) && (s=1))
{
s = 0;
for(j=0;j<i;j++)
{
if(t[j] > t[j + 1])
{
tmp = t[j];
t[j] = t[j+1];
t[j+1] = tmp;
s = 1;
}
}
i--;
}
}

</code c>
0