Pagini recente » Cod sursa (job #1647636) | Cod sursa (job #2599536) | Cod sursa (job #2742410) | Cod sursa (job #2042042) | Cod sursa (job #1717224)
#include <iostream>
#define MAXN 500001
using namespace std;
int v[MAXN], w[MAXN];
void merge ( int a, int b)
{
if(a==b)
return;
merge(a, (a+b)/2);
merge((a+b)/2 + 1, b);
int p1=a;
int p2=(a+b)/2 + 1;
memset(w, 0, sizeof(w));
for( ; p1 <= (a+b)/2 || p2 <= b; )
{
if((p2 > b) || v[p1] <= v[p2] && p1 <= (a+b)/2)
{
w[++w[0]] = v[p1];
p1++;
continue;
}
if((p1 > (a + b) / 2) || v[p1] > v[p2] && p2 <= b)
{
w[++w[0]] = v[p2];
p2++;
}
}
for(int i=1;i<=w[0];i++)
{
v[a+i-1] = w[i];
}
}
int main ()
{
int n;
freopen ("algsort.in" , "r", stdin);
freopen ("algsort.out" , "w", stdout);
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
merge (1,n);
for(int i=1;i<=n;i++)
cout<<v[i]<<" ";
cout<<endl;
return 0;
}