Pagini recente » Cod sursa (job #139095) | Cod sursa (job #1198628) | Cod sursa (job #2964165) | Cod sursa (job #1497758) | Cod sursa (job #642844)
Cod sursa(job #642844)
#include <iostream>
#include<stdio.h>
using namespace std;
bool ASC=true, DESC=false;
int a[530000];
void bS(int,int,bool);
void bM(int,int,bool);
void bS(int lo, int n, bool dir)
{
if (n>1)
{
int m=n/2;
bS(lo, m, ASC);
bS(lo+m, m, DESC);
bM(lo, n, dir);
}
}
void bM(int lo, int n, bool dir)
{
if (n>1)
{
int m=n/2;
for (int i=lo; i<lo+m; i++)
if (dir==(a[i]>a[i+m])) a[i]=a[i]^a[i+m]^(a[i+m]=a[i]);
bM(lo, m, dir);
bM(lo+m, m, dir);
}
}
int putere(int m)
{int k=1;
while (k<m/2+1)
k=k*2;
if (k*2!=m) m=k*2;
return m;
}
int main()
{int i,N,M;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&M);
N=M;
for (i=0;i<M;i++)
scanf("%d",&a[i]);
M=putere(M);
for (i=N+1;i<M;i++)
a[i]=0;
bS(0,M, ASC);
for (i=M-N;i<M;i++)
printf("%d\n",a[i]);
return 0;
}