Pagini recente » Cod sursa (job #1982453) | Cod sursa (job #1401546) | Cod sursa (job #1310757) | Cod sursa (job #1407551) | Cod sursa (job #1295258)
#include <fstream>
#include <cstring>
#include <vector>
#define dim 500002
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[dim],w[dim],b[dim];
int n,i,f[256],a,k,p;
short d[]={0,8,16,24},it,mask;
int main(){
fin>>n;
for(i=1;i<=n;i++){
fin>>a;
if(a>=0)
b[++k]=a;
else
v[++p]=-1*a;
}
for(it=0;it<4;it++){
mask=0xff;
memset(f,0,sizeof(f));
for(i=1;i<=p;i++)
f[(v[i]>>d[it])&mask]++;
for(i=1;i<=mask;i++)
f[i]+=f[i-1];
for(i=p;i>=1;i--){
w[f[(v[i]>>d[it])&mask]--]=v[i];
}
for(i=1;i<=p;i++)
v[i]=w[i];
}
for(it=0;it<4;it++){
mask=0xff;
memset(f,0,sizeof(f));
for(i=1;i<=k;i++)
f[(b[i]>>d[it])&mask]++;
for(i=1;i<=mask;i++)
f[i]+=f[i-1];
for(i=k;i>=1;i--){
w[f[(b[i]>>d[it])&mask]--]=b[i];
}
for(i=1;i<=k;i++)
b[i]=w[i];
}
for(i=1;i<=p;i++)
fout<<-1*v[i]<<" ";
for(i=1;i<=k;i++)
fout<<b[i]<<" ";
fin.close();fout.close();
return 0;
}