Programme de tri

Soyez le premier à donner votre avis sur cette source.

Vue 9 711 fois - Téléchargée 210 fois

Description

Voici mon 1ere programme en C.
J'ai realisé un programme de tri de nombres, j'ai reflechie plusieur jour a un bon algorithm pour que le programme classe le plus de nombres le plus rapidement possible. Le programme classe actuelement sur mon pc 1.000.000 chiffres allent de 0 a 1.000.000 en 63Ms.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char *argv[])
{
  DWORD deb, fin;
  int tmp,a,b,c,d,e;
  printf("nombres de chiffres a classer ?");
  scanf("%i", &c);
  printf("nombres allent de 0 a ?");
  scanf("%i", &d);
  printf("Voullez vous affichier les chiffre une foi classer ? (oui = 1; non = 0)");
  scanf("%i", &e);
  int tab [2][d];
  int tab2 [c];

  for (a=0;a<c;a++)        //   Inscrit des nobres aleatoirement   //
  tab2[a]=(rand()%d);      //         dans le tableau tab2         //

  deb = GetTickCount();      //   debut du crono   //

  for (a=0;a<c;a++)          //   fait autent de boucle qu'il y a de nombre a classer   //
  {
   tmp=tab2[a];
   if (tab[0][tmp] == tmp)             //   si le nombre a deja été classer, alors rejouté + 1   //
   tab[1][tmp] = tab[1][tmp] + 1;      //          a la desieme ligne de la colone tmp           //
   else
   {
    tab[1][tmp] = 0;                  //   si le chiffre n'a jamais été classer, inisialiser la desieme ligne de la colone tmp a 0   //
    tab[0][tmp] = tmp;
   }
  }

  if (e == 0)         //   si il ne fo pas affichier les chiffre   //
  {
   //printf("chiffre classer du plus petit au plus grand : \n");
   for (a=1;a<d;a++)              //   lire tout les casse de la 1ere ligne du tableau   //
   {
    if (tab[0][a] == a)           //   si le N° de la case est le meme que le que le N° qu'il y a dedans   //
    {
     //printf("%i\n", tab[0][a]);
     for (b=0;b<tab[1][a];b++)      //   boucle pour afficher plusieur foi les chiffre ki on apparu plusieur foi   //
     {
      //  printf("%i\n", tab[0][a]);
     }
    }
   }
  }

  if (e == 1)            //   si il fo affichier les chiffre   //
  {
   printf("chiffre classer du plus petit au plus grand : \n");
   for (a=1;a<d;a++)               //   lire tout les casse de la 1ere ligne du tableau   //
   {
    if (tab[0][a] == a)            //   si le N° de la case est le meme que le que le N° qu'il y a dedans   //
    {
     printf("%i\n", tab[0][a]);
     for (b=0;b<tab[1][a];b++)    //   boucle pour afficher plusieur foi les chiffre ki on apparu plusieur foi   //
     {
      printf("%i\n", tab[0][a]);
     }
    }
   }
  }

  fin = GetTickCount();                    //fin du crono
  printf("le tri a mi %d Ms", fin - deb);

  while(1==1);
  //Pause infini pour eviter que le programme se ferme une foi le trie terminé

  return 0;
}

Conclusion :


N'esité pas a reagir si vous avez une idéé pour ameliorer la rapidité du tri.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

BlackGoddess
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005
-
int tab [2][d]; >> tu compiles avec quel compilateur ?

normalement la taille d'un tableau DOIT être résolue a la compilation, hors la il est impossible de la connaître, puisque d est une saisie utilisateur (a l'execution donc).
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5 -
en c ca gueule avec -ansi -pedantic pour etre sur que c'est ansi, avant const ca n'existait meme pas
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13 -
Comme on te l'a fait remarquer plus haut, ton code ne compiler jamais. Faut une alloc dynamique.
Rectif attendue, merci.

BruNews, Admin CS, MVP Visual C++
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5 -
ekinoks > tu devrai isoler ta methode de tri dans une fonction, ca sera plus facile de comparer (et plus reutilisable)

int *isort(int *tab,size_t size);
Cyberboy2054
Messages postés
173
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
22 août 2008
-
C' est plutôt bon comme resultat. Mon implementation de quicksort, bien qu' étant simpliste et recursive, met 10 fois plus de temps dans les memes conditions.
Est il possible de dérécursifier quicksort, ou y-a-t' il des moyens de l'optimiser (genre une methode rapide pour trouver un bon pivot) ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.