Pagini recente » Cod sursa (job #1296319) | Cod sursa (job #1664024) | Cod sursa (job #2837558) | Cod sursa (job #1553898) | Cod sursa (job #1004892)
#include <cstdio>
using namespace std;
int a[500005],n;
void mergesort(int,int,int);
void interclasare(int,int,int);
void read()
{
freopen("algsort.in","r",stdin); scanf("%d\n",&n); for(int i=1;i<=n;++i)scanf("%d ",&a[i]); fclose(stdin);
}
void mergesort(int st,int dr)
{
if(st==dr)return;
else
{
int mid=(st+dr)/2;
mergesort(st,mid);
mergesort(mid+1,dr);
interclasare(st,mid,dr);
}
}
void interclasare(int st,int mid,int dr)
{
int b[500005],i=st,j=mid+1,k=0,h;
while(i<=mid&&j<=dr)
{
if(a[i]<a[j]){ b[++k]=a[i]; ++i; } else { b[++k]=a[j]; ++j; }
}
if(i>mid)for(h=j;h<=dr;++h)b[++k]=a[h]; else for(h=i;h<=mid;++h)b[++k]=a[h];
j=1; for(i=st;i<=dr;++i){ a[i]=b[j]; ++j; }
}
void write()
{
freopen("mergesort.out","w",stdout); for(int i=1;i<=n;++i)printf("%d ",a[i]); fclose(stdout);
}
int main()
{
read();
mergesort(1,n);
write();
return 0;
}