Je suis en Terminale S, option ISN et nous avons comme projet à rendre d'afficher un tableau trié suite au tri par fusion, en langage C.
Nous avons trouvé divers code pour les fonctions, mais aucun avec une fonction main dans lequel il y a un affichage du tableau.
Les fonctions :
void tri_fusion (int *liste, int taille)
{
if (taille < 2) return;
int milieu = taille / 2;
tri_fusion(liste, milieu);
tri_fusion(liste, taille - milieu);
fusion(liste, taille, milieu);
}
void fusion (int *a, int n, int m)
{
int i, j, k;
int *x = malloc(n * sizeof (int));
for (i = 0, j = m, k = 0; k < n; k++)
{
x[k] = j == n ? a[i++]
: i == m ? a[j++]
: a[j] < a[i] ? a[j++]
: a[i++];
}
for (i = 0; i < n; i++)
{
a[i] = x[i];
}
free(x);
}
(Je reprécise que je les ai trouvé sur le net)
J'ai alors essayé de bidouiller différentes choses pour return les valeurs du tableau a[i], mais sans succès.
J'avais donc tenté cela:
int main(void)
{
int taille=49;
printf("Quelle est la taille du tableau? ");
scanf("%d", &taille);
int i;
int tab[49];
printf("Rentrez les valeurs : \n");
for(i=0; i<=taille; i++)
{
scanf("%d", &tab[i]);
}
printf("Le tableau trié : \n %d", tri_fusion(tab, taille));
return 0;
}
Avec un
for(i=0; i<=n; i++)
{
return a[i];
}
dans la fonction fusion.
Je me dirige donc vers vous pour essayer de m'aiguiller sur la manière dont je pourrais procéder pour qu'il m'affiche les valeurs.
Ohla, déjà autant de monde pour répondre, merci beaucoup
Pour le pompage, je lui ai montré les différents sites sur lesquels j'ai pu trouver les codes donc il n'avait pas l'air d'y voir d'inconvénient. Je pense que par rapport au programme (scolaire) sur ce chapitre, le but n'est pas de faire créer aux élèves ces fonctions là, cette technique de tri, mais plutôt de comprendre leur fonctionnement et enjeux (récursivité, complexité du programme, temps d’exécution, tout ça). Effectivement, on à côté du programme à coder, à rendre un genre de "dossier d'études" et on aura un passage l'oral avec diapo, etc... pour expliquer aux autres élèves le fonctionnement du tri.
Sinon, si si je sais bien comment afficher un tableau, la chose que je ne comprenais pas été comment utiliser les valeurs du tableau final qui ont été trier dans la fonction pour les afficher.
J'ai essayé de mettre la boucle for dans la fonction fusion (à la fin bien sûr) mais à l'affichage il y a plus de valeurs que prévu, et elles ne sont pas triées. Je reprendrai le programme demain à tête reposée pour essayer de voir cela.
Et pour le <= je l'avais déjà modifié c'est juste que je travaille avec plusieurs programme pour essayer différentes solutions et sur celui-ci que j'ai copié j'ai oublié de le faire ^^.
J'ai fait exactement cela et bizarrement les valeurs ne sont pas triées mais sont dans un ordre totalement random (mais jamais l'ordre de base).. Ce que je n'arrive pas à comprendre.
Tout est réglé désormais, je vous remercie pour votre aide!
Affichage d'un tableau trié suite au tri fusion
× 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.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent