Pagini recente » Borderou de evaluare (job #1565246) | Cod sursa (job #2652402) | Cod sursa (job #2985106) | Cod sursa (job #796996) | Cod sursa (job #1221222)
#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;
for (k=p;k<=q && i<=n1 && j<=n2;++k)
if (L[i]>R[j])
A[k]=R[j],++j;
else
A[k]=L[i],++i;
while (i<=n1) A[k++]=L[i++];
while (j<=n2) A[k++]=R[j++];
}
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;
}