Pagini recente » Cod sursa (job #1093626) | Cod sursa (job #3339961) | Cod sursa (job #1837076) | Cod sursa (job #2211929) | Cod sursa (job #3327723)
#include<vector>
#include<algorithm>
#include<fstream>
using namespace std;
#define MAXN 500000
#define MAXV (1<<31)
#define MAXB (1<<16)
#define MAXNB (1<<15)
#define BITS 15
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[MAXN],tmp[MAXN];
int bucket[MAXB];
int pos[MAXB],used[MAXB];
inline int getbucket(int val) {
return val>>BITS;
}
int main() {
int n,i,j,k;
fin>>n;
for(i=0; i<n; i++) {
fin>>v[i];
}
for (i=0; i<n; i++) {
bucket[getbucket(v[i])]++;
}
for(i=1; i<MAXB; i++) {
pos[i]=pos[i-1]+bucket[i-1];
}
for(int i=0; i<n; i++) {
int b=getbucket(v[i]);
tmp[pos[b]+used[b]]=v[i];
used[b]++;
}
for(int i=0; i<n; i++) {
v[i]=tmp[i];
}
k=0;
for(i=0; i<MAXB; i++) {
int start=pos[i],finish=pos[i]+bucket[i];
if(start<finish) {
sort(v+start,v+finish);
}
}
for (i=0; i<n; i++) {
fout<<v[i]<<' ';
}
return 0;
}