Pagini recente » Cod sursa (job #339686) | Cod sursa (job #2528212) | Cod sursa (job #58659) | Cod sursa (job #1194327) | Cod sursa (job #337378)
Cod sursa(job #337378)
#include<cstdio>
using namespace std;
int n,a[500001];
void merge(int a1,int ab,int b)
{int l[250001],r[250001];
for(int i=1;i<=ab-a1+1;i++)
l[i]=a[i+a1-1];
for(int j=1;j<=b-ab;j++)
r[j]=a[j+ab];
int k1=1,k2=1;
int piv=a1;
while(k1<=(ab-a1+1) && k2<=(b-ab))
{if(l[k1]<=r[k2]) {a[piv]=l[k1];k1++;}
else {a[piv]=r[k2];k2++;}
piv++;}
if(k1<=ab-a1+1) while(k1<=ab-a1+1) {a[piv]=l[k1];k1++;piv++;}
else if(k2<=(b-ab)) {a[piv]=r[k2];k2++;piv++;}
}
void mergesort(int in,int sf)
{if(in<sf)
{int mij=(in+sf)/2;
mergesort(in,mij);
mergesort(mij+1,sf);
merge(in,mij,sf);}}
int main()
{int i1;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i1=1;i1<=n;i1++)
{scanf("%d",&a[i1]);}
mergesort(1,n);
for(i1=1;i1<=n;i1++)
printf("%d ",a[i1]);
return 0;
}