Pagini recente » Cod sursa (job #3206376) | Cod sursa (job #931683) | Cod sursa (job #161061) | Cod sursa (job #1421287) | Cod sursa (job #1222235)
/* sortare binara cu memorie n si
complexitate O(k*n) unde k reprezinta
numarul de biti pe care lucram*/
# include <fstream>
# include <cstring>
# include <iostream>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
const int nmax=500005;
const int nr_maxim_de_biti=31;
int a[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]=p-1;k[1]=u+1;
bool c;
for (int i=p;i<=u;++i)
{
c=(s[i] & m);
if (c) --k[c];else ++k[c];
a[k[c]]=s[i];
}
for (int i=p;i<=u;++i) s[i]=a[i];
sort(p,k[0],b-1);
sort(k[1],u,b-1);
}
int main(void)
{
int n=read();
for (int i=1;i<=n;++i) s[i]=read();
sort(1,n,nr_maxim_de_biti);
for (int i=1;i<=n;++i) fo<<s[i]<<" ";
fo.close();
return 0;
}