Algorithme de tri

Signaler
Messages postés
1
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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 ");

for(int i=0;i<n;i++)

printf(" %5d ",t[i]);

getch();

return 0;

}

1 réponse

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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;

  piv = tab[inf + sup / 2];
  i = inf;
  j = sup;

  while (i < j)
  {
    while (piv > tab[j])
      j--;
    while(piv < tab[i])
      i++;
    if(i < j)
    {
      tmp = tab[i];
      tab[i] = tab[j];
      tab[j] = tmp;
    }
  }
  return j;
}

void tri_rapide(int tab[], int inf, int sup)
{
  int n;
  int piv;

  n = 12; /* Pour compiler... */
  if (n > 1)
  {
    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[], int A[],int B[],int a, int b)
{
  int i, j, k;

  k = 0;
  j = 0;
  for (i = 0; (i < a) && (j < b); k++)
  {
    if (A[i] < B[j])
    {
      tab[k] = A[i];
      i++;
    }
    else
    {
      tab[k] = B[j];
      j++;
    }
  }
 
  while (i < a)
  {
    tab[k] = A[i];
    k++;
  }
  i++;
  while (i < b)
  {
    tab[k] = B[j];
    k++;
  }
  j++;
}

void diviser(int tab[], int n, int t1[], int t2[], int n1, int n2)
{
  int j, i;

  n1 = n / 2;
  n2 = n - n1;

  for (i = 0; i < n1; i++)
    t1[i] = tab[i];
  j = 0;
  i = n +1;
  while ((j < n2) && (i < n))
  {
    t2[j] = tab[i];
    i++;
    j++;
  }
}

void tri_fusion(int tab[], int n)
{
  int t1[30];
  int t2[30];
  int n1;
  int n2;

  /* Pour la compile... */
  n1 = 12;
  n2 = 12;

  if (n > 1)
  {
    n = n / 2;
    diviser(tab, n, t1, t2, n1, n2);
    tri_fusion (t1, n1);
    tri_fusion (t2, n2);
    fusion(tab, t1, t2, n1, n2);
  }
}

/*
 * Programme principale
 */
int main()
{
  int n;
  int t[30];
  int i;

  printf(" entrer la dimension n ");
  scanf("%d", &n);
  for (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 ");
  for(i = 0; i < n; i++)
    printf(" %5d ", t[i]);

  return 0;
}