Forum du groupe H
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Forum du groupe H

Forum d'entraide pour le groupe H de l'IUT informatique de Lannion.
 
AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  

 

 Les algorithmes de tri et de recherches dans les tableaux

Aller en bas 
4 participants
AuteurMessage
ezano
Admin
ezano


Messages : 59
Date d'inscription : 26/11/2009
Age : 34
Localisation : Lannion

Les algorithmes de tri et de recherches dans les tableaux Empty
MessageSujet: Les algorithmes de tri et de recherches dans les tableaux   Les algorithmes de tri et de recherches dans les tableaux Icon_minitimeJeu 26 Nov - 22:22

Salut, ce genre d'algo étant important et n'ayant pas d'autre cours d'algo dans la semaine je post les codes en langage C pour ceux qui n'aurais pas finis le TD d'algo.

Le Tri par comptage:
Code:

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

#define TAILLE 50
#define MAX 100

void tri(int tableau[], int tab[]);

int main()
{
   int tableau[TAILLE], tab[TAILLE], i;
   
   srand(time(NULL));
   
   for(i = 0; i < TAILLE; i++)
      tableau[i] = rand() % (MAX + 1);
      
   tri(tableau, tab);
   
   for(i = 0; i < TAILLE; i++)
      printf("%d ", tab[i]);
      
   return EXIT_SUCCESS;
}

void tri(int tableau[], int tab[])
{
   int i, j, x, ind[TAILLE];
   
   for(i = 0; i < TAILLE; i++)      //initialisation du tableau ind[]
      ind[i] = 0;
   
   /*on parcourt le tableau tableau[] de 0 à TAILLE et de 0+1 à TAILLE
     on cherche combien de valeur sont plus petite que celle recherché,
     grace a ce chiffre, on connais sa position dans le tableau tab[]*/
    
   for(i = 0; i < TAILLE; i++)
   {
      for(j = i+1; j < TAILLE; j++)
      {
         if(tableau[i] < tableau[j])   
            ind[i] = ind[i] + 1;
         else
            ind[j] = ind[j] + 1;
      }
   }
   
   //On se sert du tableau ind[] pour générer le tableau tab[]
   for(i = 0; i < TAILLE; i++)
   {
      x = ind[i];
      tab[x] = tableau[i];
   }
}

Le tri à bulle:
Code:

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

#define TAILLE 50
#define MAX 100

void tri(int tab[]);

int main()
{
   int tab[TAILLE], i;
   
   srand(time(NULL));
   
   for(i = 0; i < TAILLE; i++)
      tab[i] = rand() % (MAX + 1);
      
   tri(tab);
   
   for(i = 0; i < TAILLE; i++)
      printf("%d ", tab[i]);
   
   return EXIT_SUCCESS;
}

void tri(int tab[])
{
   int i, j, temp, min = 0;
   
   /*On parcourt le tableau en partant de la fin
     si la valeur précédente est infèrieur à la valeur actuelle,
     on inverse les valeurs, on est sur de retombé sur un taleau trié
     à la fin*/
   for(j = TAILLE; j > min; j--)
   {
      for(i = TAILLE; i > min; i--)
      {
         if(tab[i-1] > tab[i])
         {
            temp = tab[i-1];
            tab[i-1] = tab[i];
            tab[i] = temp;
         }
      }
      min++;   //Attention a ne pas oublier l'incrémentation
   }
}

La recherche dichotomique:

Code:

*Le principe est de recherché l'élément à la moitié du tableau,
  si l'élément recherché est superieur au milieu du tableau on fait
  de même sur la moitié du tableau supèrieur etc.
 
  Attention on suppose que le tableau est triée*/

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

int main()
{
   int tableau[] = {1, 2, 5, 8, 10, 21, 45, 57}, choix, res = 0, milieu, min = 0, taille = 7;
   
   printf("Quel élément recherchez-vous ?\n> ");
   scanf("%d", &choix);
   
   while((min <= taille) && (res == 0))   //On boucle tant que le minimum est infèrieure à la taille et que le resultat est égale à 0
   {
      milieu = (min + taille) / 2;   //On calcul le milieu du tableau
      
      if(tableau[milieu] == choix)   //Si on tombe sur l'element rechercher, res = 1 c'est cool
         res = 1;   
      else   
      {
         if(tableau [milieu] > choix)   //Sinon si l'element recherché est inferieur, alors on modifie taille pour recherché dans la partie infèrieur du tableau dans la boucle suivante
            taille = milieu - 1;
         else   //même chose dans l'autre sens =)
            min = milieu + 1;
      }
   }
   
   if(!res)
      puts("La valeur n'est pas dans le tableau");
   else
      puts("Valeur trouvé");
      
   return EXIT_SUCCESS;
}

Réponse aux exo 1 et 2 du TP8:

La tri par séléction:
Code:

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

#define MAX 100

void selection(int tableau[]);

int main()
{
   int tableau[MAX], i;;
   
   srand(time(NULL));
   
   for(i = 0; i < MAX; i++)
      tableau[i] = rand() % (MAX + 1);
   
   selection(tableau);
   
   for(i = 0; i < MAX; i++)
      printf("%d ", tableau[i]);
   
   return EXIT_SUCCESS;
}

void selection(int tableau[])
{
   int i, min, j , x;
   
    for(i = 0 ; i < MAX - 1 ; i++)
    {
        min = i;
        for(j = i+1 ; j < MAX ; j++)   //Recherche du nombre le plus petit dans le tableau
            if(tableau[j] < tableau[min])
                min = j;
        if(min != i)   //Si ce nombre est différent de la ou on veut le mettre, on le met, en gros on echange la valeur trouvé avec la valeur contenu dans l'indice du tableau ou le nombre devrai être
        {
            x = tableau[i];
            tableau[i] = tableau[min];
            tableau[min] = x;
        }
    }
}

Le tri par insertion:
Code:

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

#define MAX 100

void insertion(int tableau[]);

int main()
{
   int tableau[MAX], i;
   
   srand(time(NULL));
   
   for(i = 0; i < MAX; i++)
      tableau[i] = rand() % (MAX + 1);
      
   insertion(tableau);
   
   for(i = 0; i < MAX; i++)
      printf("%d ", tableau[i]);
      
   return EXIT_SUCCESS;
}

void insertion(int tableau[])
{
   int i,elementCourant,j, elementAInserer;
 
    for (i = 1; i < MAX; i++)
    {
        elementAInserer = tableau[i]; //On stock la valeur en i de l'élément a inséré
 
       /*On recherche le plus grand indice "elementCourant" infèrieur à i tel que:
         tableau[elementCourant <= tableau[i]*/
        elementCourant = i-1;
        while (tableau[elementCourant] > elementAInserer && elementCourant-- > 0);
 
       //il faut inséré tableau[i] juste après cette case
        elementCourant++;
     
        //décalage des valeurs du tableau entre elementCourant et i
        for (j = i-1; j >= elementCourant; j--) {
            tableau[j+1] = tableau[j];
        } 
 
        tableau[elementCourant] = elementAInserer;   //On insère la valeur stocké dans la place qui reste.
    }
}

Voila voila, il reste la recherche dichotomique sur les chaines de caractères, mais c'est le même algorithme que sur des entiers, à quelques choses prêt, il faut utiliser la fonction de traitement strcmp(); qui s'utilise comme ça.
strcmp(char *chaine1, char *chaine2);

Sinon je ne commente pas mes codes pour que ceux qui n'avait pas trouvé reflechissent dessu plutôt que d'apprendre par coeur, ça ne servirais à rien.
Si vraiment vous captez pas, signalez le moi sur ce même topic, dans ce cas j'expliquerais.


Dernière édition par ezano le Mer 2 Déc - 9:37, édité 3 fois
Revenir en haut Aller en bas
https://forum-du-groupe-h.forumactif.com
Gautier

Gautier


Messages : 65
Date d'inscription : 27/11/2009
Localisation : Lannion

Les algorithmes de tri et de recherches dans les tableaux Empty
MessageSujet: Re: Les algorithmes de tri et de recherches dans les tableaux   Les algorithmes de tri et de recherches dans les tableaux Icon_minitimeVen 27 Nov - 20:44

Bonne idée, ça me permettra de jeter un oeil sur ce bordel Wink merci
Revenir en haut Aller en bas
ezano
Admin
ezano


Messages : 59
Date d'inscription : 26/11/2009
Age : 34
Localisation : Lannion

Les algorithmes de tri et de recherches dans les tableaux Empty
MessageSujet: Re: Les algorithmes de tri et de recherches dans les tableaux   Les algorithmes de tri et de recherches dans les tableaux Icon_minitimeVen 27 Nov - 22:26

Content de voir que le forum a une chance de marché, c'est un avantage énorme l'entraide en ligne, si les autres bougent aussi =)
Je devrais pas tarder à rajouter les exercices du TP8.
Revenir en haut Aller en bas
https://forum-du-groupe-h.forumactif.com
Xeilo




Messages : 9
Date d'inscription : 29/11/2009
Localisation : Brest

Les algorithmes de tri et de recherches dans les tableaux Empty
MessageSujet: Re: Les algorithmes de tri et de recherches dans les tableaux   Les algorithmes de tri et de recherches dans les tableaux Icon_minitimeDim 29 Nov - 16:37

Merci pour la fin du tp , je le finis jamais xD!
C'est cool comme idée le forum d'entraide !
Revenir en haut Aller en bas
vincent




Messages : 1
Date d'inscription : 26/11/2009

Les algorithmes de tri et de recherches dans les tableaux Empty
MessageSujet: Re: Les algorithmes de tri et de recherches dans les tableaux   Les algorithmes de tri et de recherches dans les tableaux Icon_minitimeDim 29 Nov - 23:54

yep , merci pour la correction =)
Revenir en haut Aller en bas
Contenu sponsorisé





Les algorithmes de tri et de recherches dans les tableaux Empty
MessageSujet: Re: Les algorithmes de tri et de recherches dans les tableaux   Les algorithmes de tri et de recherches dans les tableaux Icon_minitime

Revenir en haut Aller en bas
 
Les algorithmes de tri et de recherches dans les tableaux
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Des linuxiens dans le groupe H

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum du groupe H :: Unité d'enseignement 1 :: Algorithmie-
Sauter vers: