#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<time.h>
long const it=100;
typedef struct liste{int val;
liste *suivant;
}liste;
liste *fusion(liste *g,liste *d)
{liste *scan,res;
res.suivant=NULL,scan=&res;
while (g!=NULL && d!=NULL)
{if(g->val <= d->val)
{scan=(scan->suivant=g);
g=g->suivant;
}
else
{scan=(scan->suivant=d);
d=d->suivant;
}
}
if(g!=NULL)
scan->suivant=g;
else
scan->suivant=d;
return(res.suivant);
}
liste *tri_fusion(liste *l,long n)
{FILE *fd; long i,j=it/2;
liste *scan,*prev=NULL,*m;
clock_t t1, t2;
fd = fopen("tri.txt","r" );
if(fd==NULL)
{
printf("\nLecture impossible a partir du fichier !!!\n" );
}
else
{ while(!feof(fd))
{
fscanf(fd,"%ld",&l->val);
}
}
fclose(fd);
t1= clock();
for(i=0;i<it-1;i++)
{
if(n>2)
{for(m=l,i=j;i>0;m=m->suivant,i--)
{prev =m;
}
prev->suivant=NULL;
l=tri_fusion(l,j);
m=tri_fusion(m,it-j);
return(fusion(l,m));
}
else
{if(n==2 && l->val>l->suivant->val)
{l->suivant->suivant=l;
l=l->suivant;
l->suivant->suivant=NULL;
}
t2= clock();
printf("temps d'execution du tri selection : %f secondes\n",(t2-t1)/CLK_TCK);
}
}
return(l);
}
int main()
{
long i; int n;
FILE *fd;liste *l;
fd = fopen("tri.txt","w" );
for(i=0;i<it;i++)
fprintf(fd,"%ld\n",random(it));
fclose(fd);
tri_fusion(l,n);
getch();
return(0);
}
dites moi,c'est juste ou non