Pagini recente » Cod sursa (job #1511331) | Cod sursa (job #246669) | Cod sursa (job #556444) | Cod sursa (job #3139843) | Cod sursa (job #658966)
Cod sursa(job #658966)
#include <stdio.h>
int a[500001],c[500001],lung;
void citire();
void afisare();
void mergesort(int l, int r);
void interclasare(int l,int m,int r);
int main()
{
citire();
mergesort(1,lung);
afisare();
return 0;
}
void citire()
{
FILE* file=fopen("algsort.in","r");
fscanf(file,"%d\n",&lung);
for(int i=1;i<=lung;++i)
fscanf(file,"%d",&a[i]);
fclose(file);
}
void mergesort(int l, int r)
{
if (l==r) return;
int m=(l+r)/2;
mergesort(l,m);
mergesort(m+1,r);
interclasare(l,m,r);
}
void interclasare(int l,int m,int r)
{
int i=l,j=m+1,ind=0;
while (ind<=r-l+1)
{
if ((i<=m)&&(j<=r))
{
if (a[i]<a[j])
c[ind++]=a[i++];
else c[ind++]=a[j++];
}
else if ((i>m)&&(j<=r)) c[ind++]=a[j];
else if ((i<=m)&&(j>r)) c[ind++]=a[i];
}
for (int b=0;b<r-l+1;++b)
a[l+b]=c[b];
}
void afisare()
{
FILE* file=fopen("algsort.out","w+");
for(int i=1;i<=lung;++i)
fprintf(file,"%d ",a[i]);
fprintf(file,"\n");
fclose(file);
}