Pagini recente » Monitorul de evaluare | Cod sursa (job #1875854)
#include<cstdio>
using namespace std;
int n;
int v[500001],sol[500001];
void merge_sort(int l,int r)
{
if(l>=r)
{
return;
}
int m=(l+r)/2;
merge_sort(l,m);
merge_sort(m+1,r);
int pos=0;
int go_l=l,go_r=m+1;
while(go_l<=m||go_r<=r)
{
pos++;
if(go_l<=m&&go_r<=r)
{
if(v[go_l]<v[go_r])
{
sol[pos]=v[go_l];
go_l++;
}
else
{
sol[pos]=v[go_r];
go_r++;
}
}
else if(go_l<=m)
{
sol[pos]=v[go_l];
go_l++;
}
else
{
sol[pos]=v[go_r];
go_r++;
}
}
for(int i=l;i<=r;i++)
{
v[i]=sol[i-l+1];
}
/*for(int i=1;i<=n;i++)
{
printf("%d ",v[i]);
}
printf("\n");*/
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
}
merge_sort(1,n);
for(int i=1;i<=n;i++)
{
printf("%d ",v[i]);
}
}