j'ai besoin d'un regard un peu plus expérimenté et je vous remercie d'avance pour votre aide
Je bloque sur l'exo 5, je vous joins en dessous mon code pour trier les valeurs d'un tableau dans l'ordre croissant.
Le code fonctionne lorsque mon tableau est composé de 4 valeurs mais pas plus. Au delà, il m'affiche les valeurs dans l'ordre de départ. Est ce que vous pourriez m'aider à comprendre, j'ai essayé pas mal de choses et je commence à m'embrouiller Merci beaucoup!
void ordonnerTableau(int tableau[], int tailleTableau);
void ordonnerTableau(int tableau[], int tailleTableau)
{
int i;
int j;
int suiteOrdreCroissant;
while (suiteOrdreCroissant!=0)
{
for (i=0; i<tailleTableau; i++)
{
if (tableau[i]>tableau[i+1])
{
j = tableau[i];
tableau[i] = tableau[i+1];
tableau[i+1]= j;
i = tailleTableau+1;
suiteOrdreCroissant = 1;
}
else
{
suiteOrdreCroissant = 0;
}
}
}
for (i=0; i<tailleTableau; i++)
{
printf("%d\n", tableau[i]);
}
Salut, Où as-tu pris cet algorithme de tri? Ça ressemble à un tri à bulles. Que vaut suiteOrdreCroissant avant le while? N'importe quoi, mais il y a des chances que ce soit 0. Pour tester un tri en ordre croissant, il est bon d'initialiser le tableau en ordre décroissant. Dans un tri à bulle, la première itération ne fait que déplacer le plus grand à la dernière position, c'est tout. L'idée est de recommencer sur les N-1 premières positions pour que le 2ième plus grand soit l'avant dernier. Et ainsi de suite ... J'abandonnerais l'idée du flag suiteOrdreCroissant.
Le Tout est souvent plus grand que la somme de ses parties.
Je n'ai pas vraiment "trouvé" ce code, j'ai lu énormément sur les forums, des vidéos youtube et j'ai taté par moi même. C'est le premier code parmi tout ce que j'ai testé qui m'a donné un résultat
Avec la première boucle while, j'ai voulu dire : tant que tous les nombres ne sont pas classés, tu recommences. je pensais avoir mis en place une boucle avec booléens. Mais effectivement je n'ai pas initialisé de valeur. Quand j'enlève le while, avec le booleen, ca ne fonctionne plus du tout et me donne les nombres dans l'ordre de base
Je ne comprend pas parce que avec 4 valeurs ou moins, ca fonctionne, mais avec plus, ca ne fonctionne plus du tout.
Je prends tout tes conseils et je vais continuer de me creuser la tête.
Il y des indéterminées dans ce ton code, je pense que c'est la cause de ton problème: - ligne 10 : tu testes suiteOrdreCroissant mais tu n'as jamais décidé de sa valeur initiale. - ligne 14 : tu testes tableau[i+1] mais attention quand i atteint la dernière case du tableau, tableau[i+1] n'est pas défini. Il faut que la boucle for s'arrête un indice plus tôt. - ligne 19 : c'est une idée, mais l'enlever et enlever en même temps les lignes 22 à 25 devrait permettre à la fonction d'être plus rapide.
J'ai pris le temps de testé ton code. Premièrement, puisque tu compares tableau[i] avec tableau[i+1] il faut vérifier que tailleTableau soit < tailleTableau-1. J'ai volontairement mis au début de mes tests tableau[tailleTableau] = 0 Cette position est en dehors du tableau, je le signale. Mon tableau commençait par 0 alors que j'avais mis des valeurs de 1 à 10 en ordre inverse sur un tableau de longueur 10. J'ai également compté le nombre de comparaisons. C'est un tri particulièrement inefficace. Je ne sais pas où tu as cherché pour trouver ce tri. Un tri à bulles m'aurais pris 45 ( N*(N-1)/2 ) comparaisons. Ce tri m'en a pris 174. Je te suggère de regarder du côté des tris par sélection, insertion, bulles. Ce ne sont pas des tris efficaces, mais ils sont faciles à coder.
Le Tout est souvent plus grand que la somme de ses parties.
Déjà en initialisant ma variable suiteOrdreCroissant à 1, le code fonctionne, peu importe le nombre de valeur dans mon tableau. Et je suis déjà très contente vu le temps passé ^^
Je vais tester tout vos conseils pour essayer de trouver une solution plus rapide, et optimiser le nombre de comparaison, je commence tout juste a comprendre la logique.
Je vous remercie vraiment pour vos réponses!
Exercice 5 - Trier valeurs tableau
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
En recherche d'emploi.
Le Tout est souvent plus grand que la somme de ses parties.