Pagini recente » Cod sursa (job #2842416) | Cod sursa (job #757281) | Cod sursa (job #135422) | Cod sursa (job #1162858) | Cod sursa (job #1222166)
/* sortare binara cu memorie 2*n si
complexitate O(k*n) unde k reprezinta
numarul de biti pe care lucram*/
# include <fstream>
# include <cstring>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
const int nmax=500005;
int a[2][nmax];
int s[nmax];
int read()
{
char c[30];
fi>>c;
int k=strlen(c),p=0;
for (int i=0;i<k;++i) p=p*10+c[i]-'0';
return p;
}
void sort(int p,int u,int b)
{
if (b<0 || p>=u) return;
int m=1<<b,k[2];
k[0]=k[1]=0;
bool c;
for (int i=p;i<=u;++i)
{
c=(s[i] & m);
++k[c];
a[c][k[c]]=s[i];
}
int w=p-1;
for (int i=0;i<2;++i)
for (int j=1;j<=k[i];++j) s[++w]=a[i][j];
sort(p,p+k[0]-1,b-1);
sort(u-k[1]+1,u,b-1);
}
int main(void)
{
int n=read();
for (int i=1;i<=n;++i) s[i]=read();
sort(1,n,31);
for (int i=1;i<=n;++i) fo<<s[i]<<" ";
fo.close();
return 0;
}