Pagini recente » Cod sursa (job #2749848) | Cod sursa (job #268107) | Cod sursa (job #3213208) | Cod sursa (job #559261) | Cod sursa (job #479811)
Cod sursa(job #479811)
#include <stdio.h>
#define nmax 500000
int N, v[nmax+1], newv[nmax+1];
void read()
{
int i;
freopen("algsort.in","r",stdin);
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&v[i]);
fclose(stdin);
}
void merge_sort(int a, int b)
{
if(b==a)
return;
int mid=(a+b)/2;
merge_sort(a, mid), merge_sort(mid+1, b);
int it=0, i, j;
for(i=0, j=0;a+i<=mid && mid+1+j<=b;)
{
if(v[a+i]<=v[mid+1+j])
newv[++it]=v[a+i], i++;
else
newv[++it]=v[mid+1+j], j++;
}
for(;a+i<=mid;i++)
newv[++it]=v[a+i];
for(;mid+1+j<=b;j++)
newv[++it]=v[mid+1+j];
for(i=1;a+i-1<=b;i++)
v[a+i-1]=newv[i];
}
void write()
{
int i;
freopen("algsort.out","w",stdout);
for(i=1;i<=N;i++)
printf("%d ",v[i]);
printf("\n");
fclose(stdout);
}
int main()
{
read();
merge_sort(1,N);
write();
return 0;
}