chegue02
Messages postés1Date d'inscriptionlundi 8 juin 2009StatutMembreDernière intervention 8 juin 2009
-
8 juin 2009 à 11:40
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
9 juin 2009 à 18:38
Bonjour,
svp vous pouvez mé corrigé ce code concernant l'algorithme de tri
merci d'avance
#include<stdio.h>
#include<conio.h>
// fonction qui permet de trier tab en utilisant la methode de tri a bulle
int tri_bulle ( int tab[], int n)
{ int ok=0;
for (int i=0;(i<n)&&ok==0;i++)
{ok=1;
for (int j=0;j<n;j++)
{
if(tab[j]>tab[j+1])
{
int permuter (tab [j],tab[j+1])
tmp =tab[j+1];
tab[j+1]=tab [j];
tab[j]=tmp;
ok=0;
}
}
}
}
// fonction qui permet de trier tab en utilisant la methode de tri par insertion
void Tri_inser(int tab[],int n)
{
for(int i=1;i<n;i++)
{
for(int j=0;j=j;k--)
tab[k]=tab[k-1];
tab[j]=tmp;
}
}
}
// fonction qui permet de trier tab en utilisant la methode de tri sélection du minimum
/void Tri_select(int tab[],int n)
{
for (int i=0;i<n-1;i++)
{
int m=i;
for( int j=i+1; j<n ; j++)
if(tab[j] >tab[m]) m=j;
int tmp=tab[i];
tab[i]=tab[m];
tab[m]=tmp;
}
}
// fonction qui permet de trier tab en utilisant la methode de tri par permutation
void Tri_permut( int tab[])
{
int i,j,tmp;
for (i=n-1; i>0; i--)
{
for (j=n-1; j>=0; j--)
{ if ( tab[i]<tab[j])
tmp=tab[i];
tab[i]=tab[j];
tab[j]=tmp;
}
}
// }
// fonction qui permet de trier tab en utilisant la methode de tri rapide
/int partition (int tab[], int inf, int sup)
{ int piv=tab[(inf+sup/2)];
int i=inf;
int j=sup;
while(i<j)
{
while(piv>tab[j])
j--;
while(piv<tab[i])
i++;
if(i<j)
{
int tmp=tab[i];
tab[i]=tab[j];
tab[j]=tmp;
}
}
return j;
}
tri rapide(int tab[],int inf, int sup)
{ if(n>1)
{ int piv=partition(tab,inf,sup);
tri rapide (tab,inf,piv-1à;
tri rapide (tab,piv+1,sup);
}
// }
// fonction qui permet de trier tab en utilisant la methode de tri fusion
void fusion (int tab[30],int A[10],int B[20],int a,int b)
{ int i,j,k=0;
for(i=0;j=0;(i1)
{ n=n/2;
division (tab,n,t1,n1,t2);
tri fusion (t1,n1);
tri fusion (t2,n2);
fusion (tab,n,t1,n1,t2);
}
}
// Programme principale
int main()
{
int n,t[30],t1[30],t2[30];
printf(" entrer la dimension n ");
scanf("%d",&n);
for(int i=0;i<n;i++)
{ printf(" entrer l element %d ",i+1);
scanf("%d",&t[i]);
}
printf(" \n Affichage de T avant le triage : \n ");
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 9 juin 2009 à 18:38
Bienvenue,
En indentant comme ça, tu dois en baver avec les accolades.
Correction, en indentant comme ça, tu en baves avec les accolades, et ça se voit.
Un code pas indenté perd, je sais pas, 30 ou 40% de lisibilité. INDENTE !
conio.h si c'est juste pour faire une pause, autant s'en passer, pas standard.
Les déclaration de variables au milieu du code c'est vrai que tu as le droit sur du C "récent", mais en général c'est déconseillé.
Les commentaires //, pareil, ça ne respècte pas les vieux standard -> /* ... */. Mais bon c'est pareil t'es pas obligé.
Essaie de compiler avec les warnings :
gcc -Wall test.c -o test.exe
Ca permet de trouver un paquet de problèmes.
Il y a des trucs qui ressemble à rien, par exemple un caractère à qui traine à la place d'une parenthèse...
Des slashs on sait pas ce qu'il fait là -> /void Tri_select.
Des noms de fonction avec des espaces...
Ce code ne compilait pas quand tu l'as posté. La moindre des choses aurait été qu'il soit en mesure de compiler.
La fonction diviser qui est appelée division ailleurs dans le code.
Quand on veut faire une boucle for avec plusieurs instructions dans l'initialisation et le bouclage, il faut utiliser des , pas des ; ->for ( i 5, j 10 ; i + j < 20; i++, j++ )
Quand tu code, compile tout le temps. Il faut pas tout coder puis tout tester. Il faut faire un bout de code, tester, et ainsi de suite.
Et fallait surtout pas essayer de faire toutes les procédures de tri avant d'en avoir au moins une qui marche.
Entrer les valeurs à la main à chaque fois, c'est chiant. Autant initialiser des tableaux dans le code, avec rand :
http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ Et une fois que tu as une fonction de tri qui marche, tu peux t'en servir pour vérifier le résultat des autres fonctions avec du code.
Le code des tris n'est jamais appelé. A se demander pourquoi tu l'as écrit. Pourquoi serait-ce à nous de l'écrire.
Voilà le code qui compile.
Et qui fait n'importe quoi.
Bon courage pour la suite.
Et souviens toi -> RIGUEUR.
Tu aurais poster un code comme ça, j'aurais pu plus t'aider, mais là j'ai consommé le temps que je t'avais imparti.
<hr size="2" width="100%" />#include<stdio.h>
/*
* fonction qui permet de trier tab en utilisant la methode de tri a bulle
*/
void tri_bulle (int tab[], int n)
{
int ok;
int tmp;
int i;
int j;
ok = 0; for (i 0; (i < n) && (ok 0); i++)
{
ok = 1;
for (j = 0; j < n; j++)
{
if (tab[j] > tab[j + 1])
{
tmp = tab[j + 1];
tab[j + 1] = tab [j];
tab[j] = tmp;
ok = 0;
}
}
}
}
/*
* fonction qui permet de trier tab en utilisant la methode de tri par insertion
*/
void Tri_inser(int tab[], int n)
{
int tmp;
int i, j, k;
for (i = 1; i < n; i++)
{
for (j = 0; j < i; j++)
if (tab[i] < tab[j])
{
tmp = tab[i];
for(k = i; k >= j; k--)
tab[k] = tab[k - 1];
tab[j]=tmp;
}
}
}
/*
* fonction qui permet de trier tab en utilisant la methode de tri sélection du minimum
*/
void Tri_select(int tab[], int n)
{
int tmp;
int m;
int i, j;
for (i = 0; i < n - 1; i++)
{
m = i;
for (j = i + 1; j < n; j++)
if (tab[j] > tab[m])
m = j;
tmp = tab[i];
tab[i] = tab[m];
tab[m] = tmp;
}
}
/*
* fonction qui permet de trier tab en utilisant la methode de tri par permutation
*/
void Tri_permut(int tab[])
{
int n;
int tmp;
int i, j;
for (i = n - 1; i > 0; i--)
{
for (j = n - 1; j >= 0; j--)
{
if (tab[i] < tab[j])
{
tmp=tab[i];
tab[i]=tab[j];
tab[j]=tmp;
}
}
}
}
/*
* fonction qui permet de trier tab en utilisant la methode de tri rapide
*/
int partition (int tab[], int inf, int sup)
{
int piv;
int tmp;
int i, j;