begin process at 2012 05 28 07:10:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

algorithme de tri


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

algorithme de tri

lundi 8 juin 2009 à 11:40:26 | algorithme de tri

chegue02

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<i;j++)
if(tab[i]<tab[j])
{
int tmp=tab[i];
for(int 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)
{
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;(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++;
}

diviser (int tab,n,t1,n2,t2)
{int j,i;
n1=n/2;
n2=n-n1;

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

void tri_fusion(int tab[],int n)
{ if(n>1)
{ 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;
}
mardi 9 juin 2009 à 18:38:47 | Re : algorithme de tri

rt15

Membre Club Administrateur CodeS-SourceS
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.

#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;
}




Cette discussion est classée dans : int, tri, tab, for, tmp


Répondre à ce message

Sujets en rapport avec ce message

help une fonction qui a besoin de vous [ par natacha86 ] Re bonjour a tout le monde, voila j'ai mis tout le prog si vous voulez tester, en fait le pb viens de la fonctino tri_shell(), je ne sais pas pkoi ell pb en c urgenttttttttttttttttt [ par natacha86 ] bonjour, j'ai un probleme avec mon programme, il ne veut pas sortir, j'ai fais un menu et apparement ya un bug mais je ne comprend rien.le code est as encore un pb en c svp....... [ par natacha86 ] j'ai essayer de séparer les fonctions mais ca ne marche pas...#include #include #include #include #include #define MAX 1000000 tableau [ par imanedaoudi ] Salut,Je veux récuperer le tableaux triée sans faire return, avec ce programme je recupere le tableau non trier ,comment faire pour recuperer le tab t Help! Pb de spécif en C [ par tomalille ] Bonjour, je suis en train d'écrire un programme et je voudrai faire une fonction qui renvoit un tableau d'entier.Je n'arrive pas à faire la spécif.Vou problème avec des listes > 30 éléments [ par tomalille ] Bonjour,je finalise un programme qui fonctionne parfaitement sauf que je ne peux pas travailler avec une liste de plus de 30 éléments pour le tri par compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo Besoin d'aide urgent SVP [ par paulina82 ] Bonjour, j'ai un gros probleme avec mon programme ecri en langage C.lorsque je complile il n'afiche pa d'erreur mais lorsque j'esaye de l'executé il Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le pb avec fonctions sqrt de math.h [ par fox88 ] voici mon code : void histod::calcul_moyenne_ecartype(){ //CALCUL MOYENNE DU NB D'APPELS MOYEN JOURNALIER unsigned long accu=0; int moyenne=0;<br


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,153 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales