Pagini recente » Cod sursa (job #2203375) | Rating Anghel Eduard (Edi17ro) | Cod sursa (job #67703) | Cod sursa (job #2731479) | Cod sursa (job #1221218)
#include<fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
const int nmax = 500000+10;
int n,A[nmax],L[nmax/2],R[nmax/2];
void Merge(int p,int r, int q)
{
int n1=r-p+1;
int n2=q-r;
int i,j,k;
for (i=1;i<=n1;++i)
L[i]=A[i+p-1];
for (i=1;i<=n2;i++)
R[i]=A[i+r];
i=j=1;
L[n1+1]=R[n2+1]=1<<31-1;
for (k=p;k<=q;++k)
if (L[i]>R[j])
A[k]=R[j],++j;
else
A[k]=L[i],++i;
}
void MergeSort(int l, int r)
{
if (l<r) {
MergeSort(l,(l+r)/2);
MergeSort((l+r)/2+1,r);
Merge(l,(l+r)/2,r);
}
}
void Read()
{
cin>>n;
for (int i=1;i<=n;i++)
cin>>A[i];
}
void Solve()
{
MergeSort(1,n);
for (int i=1;i<=n;i++)
cout<<A[i]<<" ";
}
int main()
{
Read();
Solve();
return 0;
}