Code:
#include <stdio.h>
#include <stdlib.h>
#define bs 100
void remplissage_al(int* t, int n)
{
int i;
for(i=0;i<n;i++)
*(t++)=rand()%bs;
}
void remplissage_man(int* t, int n)
{
int i;
for(i=0;i<n;i++)
{printf("donnez un element : ");
scanf("%d",t++);}
}
void affichage(int* t,int n)
{
int i;
printf("\n");
for(i=0;i<n;i++)
printf("%d\t",*t++);
printf("\n");
}
int recherchesq(int *t,int n,int x)
{
int i;
for(i=0;i<n;i++)
if(*(t++)==x) return 1;
return 0;
}
void permuter(int* a,int* b)
{
int c;
c=*a;
*a=*b;
*b=c;
}
void bulle(int* t,int n)
{
int i,j;
for(j=0;j<=n-1;j++)
for(i=n-1;i>j;i--)
if(t[i]<t[i-1]) permuter(&t[i],&t[i-1]);
}
void insert(int* T,int D,int G)
{
int i,aux;
i=D-1;
aux=T[D];
while((i>=G+1)&&(T[i]>aux)) // probleme ici
{T[i+1]=T[i];
i--;}
if(T[G]>aux)
{i=G-1;
T[G+1]=T[G];
}
T[i+1]=aux;// probleme ici
}
void tri_insert(int* t,int g,int n)
{
int i;
for(i=g+1;i<=n;i++)
insert(t,i,g);
}
int recherchedc(int* t,int b,int x)
{
int m,a=0;
while(a!=b)
{ m=(a+b)/2;
if(x>t[m]) a=m+1;
else b=m;
}
if(t[a]==x) return 1;
else return 0;}
void fusion(int *t1,int n1,int *t2,int n2)
{
int *t3,n3,i,j,k;
i=j=k=0;
n3=n1+n2;
t3=(int*)malloc(n3*sizeof(int));
while((i<n1)&&(j<n2))
{
if(t1[i]<t2[j]) {t3[k]=t1[i];k++;i++;}
else {t3[k]=t2[j];k++;j++;}
}
while(i<n1) {t3[k]=t1[i];k++;i++;}
while(j<n1) {t3[k]=t2[j];k++;j++;}
affichage(t3,n3);
}
int main()
{
int *t1,*t2,n1,n2,x,choix,b;
do{
b=0;
//****************************************************** aleatoire
printf("entrez la dimension du tableau aleatoire : ");
scanf("%d",&n1);
t1=(int*)malloc(n1*sizeof(int));
remplissage_al(t1,n1);
affichage(t1,n1);
//******************************************************* recher sq
printf("\nentrez l'element a rechercher (recherche sequentielle) : ");
scanf("%d",&x);
if(recherchesq(t1,n1,x)==1) printf("%d existe\n",x);
else printf("%d n'existe pas\n",x);
//****************************************************** tri
printf("\nchoisissez la methode pour tier la table : \n1 pour methode bulle\n2 pour methode insetion : ");
do{
scanf("%d",&choix);
switch(choix)
{
case 1:bulle(t1,n1);affichage(t1,n1);break;
case 2:tri_insert(t1,0,n1-1);affichage(t1,n1);break;
default : printf("choix invalide ");break;
}}while((choix!=1)&&(choix!=2));
//****************************************************** recher dicho
printf("entrez l'element a rechercher (recherche dichotomique): ");
scanf("%d",&x);
if(recherchedc(t1,n1,x)==1) printf("%d existe",x);
else printf("%d n'existe pas",x);
//******************************************************* manu
printf("\n");
printf("\nentrez la dimension du tableau a remplir : ");
scanf("%d",&n2);
t2=(int*)malloc(n2*sizeof(int));
remplissage_man(t2,n2);
affichage(t2,n2);
//******************************************************** trier 2eme table
printf("\nchoisissez la methode pour tier la 2eme table : \n1 pour methode bulle\n2 pour methode insetion : ");
do{
scanf("%d",&choix);
switch(choix)
{
case 1:bulle(t2,n2);affichage(t2,n2);break;
case 2:tri_insert(t2,0,n2-1);affichage(t2,n2);break;
default : printf("choix invalide ");break;
}}while((choix!=1)&&(choix!=2));
//******************************************************* fusion
printf("si vous voulez fusioner les 2 tables tapez 1\nsi non tapez 2 : ");scanf("%d",&choix);
if(choix==1) {fusion(t1,n1,t2,n2);}
else return 0;
printf("\ntappez \n1 : pour une autre tentation\n2 : pour quittez");
}while(b==1);
return 0;
}