Pagini recente » Cod sursa (job #1001848) | Cod sursa (job #2454718) | Cod sursa (job #1229098) | Cod sursa (job #3264865) | Cod sursa (job #1279863)
#include <iostream>
#include<fstream>
using namespace std;
ofstream g("radix.out");
#define maxn 10000001
#define mod 6
#define maxp 31
int v[2][maxn], frecv[1<<mod];
int nr[maxn], n, sign=0;
void radixsort()
{
int p, cv, i;
for (i=1;i<=n;i++) v[0][i]=i;
for (p=0;p<=maxp;p+=mod)
{
for (i=1;i<=n;i++)
frecv[(nr[v[sign][i]]/(1<<p))%(1<<mod)]++;
for (i=1;i<(1<<mod);i++)
frecv[i]+=frecv[i-1];
for (i=n;i>=1;i--)
{
frecv[(nr[v[sign][i]]/(1<<p))%(1<<mod)]--;
cv=frecv[(nr[v[sign][i]]/(1<<p))%(1<<mod)]+1;
v[!(sign)][cv]=v[sign][i];
}
for (i=0;i<(1<<mod);i++) frecv[i]=0;
sign=!(sign);
}
}
int main()
{
ifstream f("radix.in");
int i, cv;
f>>n;
for (i=1;i<=n;i++) f>>nr[i];
radixsort();
sign=(!(sign));
for (i=1;i<=n;i++) {
cv=v[sign][i];
g<<nr[cv]<<' ';}
g<<'\n';
}