ezano Admin
Messages : 59 Date d'inscription : 26/11/2009 Age : 34 Localisation : Lannion
| Sujet: Les algorithmes de tri et de recherches dans les tableaux Jeu 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 | |
|
Gautier
Messages : 65 Date d'inscription : 27/11/2009 Localisation : Lannion
| Sujet: Re: Les algorithmes de tri et de recherches dans les tableaux Ven 27 Nov - 20:44 | |
| Bonne idée, ça me permettra de jeter un oeil sur ce bordel merci | |
|
ezano Admin
Messages : 59 Date d'inscription : 26/11/2009 Age : 34 Localisation : Lannion
| Sujet: Re: Les algorithmes de tri et de recherches dans les tableaux Ven 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. | |
|
Xeilo
Messages : 9 Date d'inscription : 29/11/2009 Localisation : Brest
| Sujet: Re: Les algorithmes de tri et de recherches dans les tableaux Dim 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 ! | |
|
vincent
Messages : 1 Date d'inscription : 26/11/2009
| Sujet: Re: Les algorithmes de tri et de recherches dans les tableaux Dim 29 Nov - 23:54 | |
| yep , merci pour la correction =) | |
|
Contenu sponsorisé
| Sujet: Re: Les algorithmes de tri et de recherches dans les tableaux | |
| |
|