Pagini recente » Cod sursa (job #818931) | Cod sursa (job #2263612) | Cod sursa (job #2082276) | Cod sursa (job #1241789) | Cod sursa (job #457817)
Cod sursa(job #457817)
#include<fstream>
#define bit_number 8
#define length (1<<bit_number)-1
#define data_type int
#define max_n 500000
using namespace std;
int n,
a[max_n],b[max_n];
void radix(int bit, int S[], int D[])
{
int i,index[length+1],count[length+1];
for(i=0;i<=length;++i)
count[i]=0;
for(i=1;i<=n;++i)
count[(S[i]>>(bit*bit_number))&length]++;
index[0]=1;
for(i=1;i<=length;++i)
index[i]=index[i-1]+count[i-1];
for(i=1;i<=n;i++)
D[index[(S[i]>>(bit*bit_number))&length]++]=S[i];
}
void gotta_sort_em_all()
{
for(int i=0;i<sizeof(data_type)*8/bit_number;++i)
{
if(i%2)
radix(i,b,a);
else
radix(i,a,b);
}
}
int main()
{
ifstream read ("algsort.in");
ofstream write ("algsort.out");
read>>n;
int i;
for(i=1;i<=n;++i)
read>>a[i];
gotta_sort_em_all();
for(i=1;i<=n;i++)
write<<a[i]<<' ';
write<<'\n';
return 0;
}