Pagini recente » Cod sursa (job #1580186) | Cod sursa (job #1511821) | Cod sursa (job #2127319) | Cod sursa (job #567778) | Cod sursa (job #2200861)
#include <bits/stdc++.h>
#define NMAX 500005
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
void merge(int *v,int a,int b)
{
int mid=(a+b)/2;
/*int L[mid-a+5],R[b-mid+5];
int k;
k=0;
for(int i=a;i<=mid;i++)
{
L[i-a+1]=v[i];
}
for(int i=mid+1;i<=b;i++)
{
R[i-mid]=v[i];
}
int i,j;
i=1;j=1;
while(i<= mid-a+1 and j<=b-mid)
{
while(L[i]<=R[j])v[++k]=L[i++];
while(L[i]>=R[j])v[++k]=R[j++];
}
while(i<= mid-a+1)v[++k]=L[i++];
while(j<=b-mid)v[++k]=R[j++];*/
int done[b-a+5];
int i=a;
int j=mid+1;
int k;
k=0;
while(i<=mid and j<=b)
{
if(j>b or (i<=mid and v[i]<=v[j]))
done[++k]=v[i++];
else
done[++k]=v[j++];
}
for(i=a; i<=b; i++)
v[i]=done[i-a+1];
}
void merge_sort(int *v, int a,int b)
{
int mid=(a+b)/2;
if(a==b)return;
merge_sort(v,a,mid);
merge_sort(v,mid+1,b);
merge(v,a,b);
}
int n,i,v[NMAX];
int main()
{
fin>>n;
for(i=1; i<=n; i++)
{
fin>>v[i];
}
merge_sort(v,1,n);
for(i=1; i<=n; i++)
{
fout<<v[i]<<" ";
}
return 0;
}