Pagini recente » Peluza Nord | Cod sursa (job #847748) | Cod sursa (job #947897) | Cod sursa (job #2295544) | Cod sursa (job #642684)
Cod sursa(job #642684)
#include <iostream>
#include<stdio.h>
using namespace std;
bool ASCENDING=true, DESCENDING=false;
int a[10000];
void bitonicSort(int,int,bool);
void bitonicMerge(int,int,bool);
void bitonicSort(int lo, int n, bool dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}
void bitonicMerge(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]);
bitonicMerge(lo, m, dir);
bitonicMerge(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;
bitonicSort(0,M, ASCENDING);
for (i=M-N;i<M;i++)
printf("%d\n",a[i]);
return 0;
}