Pagini recente » Rating Oprea Cristina (cristini_q) | Monitorul de evaluare | Cod sursa (job #487785) | Cod sursa (job #1602592) | Cod sursa (job #656472)
Cod sursa(job #656472)
#include <stdio.h>
int n , v[500005];
void create()
{
freopen("algsort.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
}
void merge(int s, int d)
{
int i=s,j=(s+d)/2+1,k=1,a[500005];
while(i<=(s+d)/2 && j<=d)
{
if(v[i]>v[j]){a[k]=v[j];j++;}
else {a[k]=v[i];i++;}
k++;
}
if(i<=(s+d)/2)
while(i<=(s+d)/2)
{
a[k]=v[i];k++;i++;
}
else
while(j<=d)
{
a[k]=v[j];k++;j++;
}
for(k=1,i=s;i<=d;k++,i++)
v[i]=a[k];
}
void mergesort(int p , int q)
{
if(p<q)
{
mergesort(p,(p+q)/2);
mergesort((p+q)/2+1,q);
merge(p,q);
}
}
void write()
{
freopen("algsort.out","w",stdout);
for(int i=1;i<=n;i++)
printf("%d ",v[i]);
}
int main()
{
create();
mergesort(1,n);
write();
}