Pagini recente » Cod sursa (job #653403) | Cod sursa (job #654560) | Cod sursa (job #2898355) | Cod sursa (job #1418861) | Cod sursa (job #416935)
Cod sursa(job #416935)
/* MERGESORT Recursiv = Iterativ*/
#include <stdio.h>
#include <stdlib.h>
int v[100],w[100],n;
void MergeSort(int s,int d,int adancime)
{ int m,i,j,ii,jj,c;
int *vp,*wp;
if (d-s+1>2) { m=(d-s)/2;
MergeSort(s,m,-adancime);
MergeSort(m+1,d,-adancime);
ii=m-s+1,jj=d-m;
i=s; j=m+1; c=s;
if (adancime>0) {vp=v; wp=w;}
else {wp=v; vp=w;}
while(i<ii && j<jj)
{ if (wp[i]<wp[j]) {i++; vp[c]=wp[i]; c++;}
else {j++; vp[c]=wp[j]; c++;}
}
if (i==ii)
for(;j<jj;) {vp[c]=wp[j]; c++;}
if (j==jj)
for(;i<ii;) {vp[c]=wp[i]; c++;}
}
else if(d-s+1==2) { if (adancime>0) {vp=v; wp=w;}
else {wp=v; vp=w;}
if (wp[s]>wp[d])
{vp[s]=wp[d];
vp[d]=wp[s];
}
}
}
int main()
{ int i;
FILE* f=fopen("algsort.in","rt"),*g=fopen("algsort.out","wt");
// fprintf(g,"kkk");
fscanf(f,"%i",&n);
for (i=0;i<n;i++) { fscanf(f,"%i",v+i);
w[i]=v[i];
}
// fprintf(g,"kkk");
MergeSort(0,n-1,1);
// fprintf(g,"kkk");
for(i=0;i<n;i++)
fprintf(g,"%i ",v[i]);
fclose(f);
fclose(g);
return 0;
}