#include #include #include #include #include #include #include #include int NbIteration; void InitIterattion() { NbIteration=0; } void Iteration() { NbIteration++; } //Lineaire int Lineaire(int x, int v[],int n) { int i; InitIterattion(); for (i = 0; i < n && x > v[i]; i++) { Iteration(); } if (i < n && v[i] == x) return i; return -1; } //Dichotomique int Dichotomique(int x, int v[],int n) { int Debut=0,Fin=n-1,Milieu; InitIterattion(); while(Debut<=Fin) { Iteration(); Milieu=(Debut+Fin)/2; if(xv[Milieu]) Debut=Milieu+1; else return Milieu; } return -1; } //Hachage typedef struct elt { int *Pos; int n; }ElementIndex; ElementIndex Index[10]; void InitIndex(int n) { int i; for(i=0;i<10;i++) { Index[i].Pos=(int *)malloc(n*(sizeof (int))); Index[i].n=0; } } void RomplireIndex(int x,int pos) { int cle=x%10; Index[cle].Pos[Index[cle].n]=pos; Index[cle].n++; } void AfficheIndex() { int i,j; ElementIndex EI; int n; printf ("\n"); printf("Index:\n"); printf("----- \n"); for(i=0;i<9;i++) { EI=Index[i]; n=EI.n; printf(" Cle:%d\n",i); for(j=0;jInf=Arbre->Sup=NULL; Arbre->x=x; Arbre->Pos=Pos; } else { Noeud *N=Arbre,*NP=NULL; while(N!=NULL) { NP=N; if(xx) N=N->Inf; else N=N->Sup; } N=(Noeud*)malloc(sizeof(Noeud)); N->Inf=N->Sup=NULL; N->x=x; N->Pos=Pos; if(NP!=NULL) { if(xx) NP->Inf=N; else NP->Sup=N; } } } void RomplireArbre(int v[],int Debut,int Fin) { int Milieu; if(Debut<=Fin) { Milieu=(Debut+Fin)/2; RomplireArbre(v[Milieu],Milieu); RomplireArbre(v,Debut,Milieu-1); RomplireArbre(v,Milieu+1,Fin); } } void AfficheArbre(Noeud *N) { if(N!=NULL) { printf ("@N%d(%d,%d,%d,%d)\n",N,N->x,N->Pos,N->Inf,N->Sup); AfficheArbre(N->Inf); AfficheArbre(N->Sup); } } int ArbreBinaire(int x) { InitIterattion(); Noeud *N=Arbre; while(N!=NULL && N->x!=x) { Iteration(); if(xx) N=N->Inf; else N=N->Sup; } if(N!=NULL) return N->Pos; return -1; } //fonction utile void VecteurAleatoir(int v[],int n) { int i; v[0]=0; RomplireIndex(v[0],0); //RomplireArbre(v[0],0); for(i=1;i