Pagini recente » Cod sursa (job #139590) | Cod sursa (job #621351) | Cod sursa (job #2342133) | Cod sursa (job #2241960) | Cod sursa (job #443289)
Cod sursa(job #443289)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE* fin=fopen("algsort.in","r");
FILE* fout=fopen("algsort.out","w");
#define MAXN 500005
#define BASE 1024
#define max(a,b) (((a)>(b))?(a):(b))
int n,vec[MAXN],b[MAXN],maxv=-1;
bool comp(int a,int b){
return a%BASE<b%BASE;
}
void radixSort(){
int exp=1;
while(maxv/exp>0){
int bucket[BASE]={0};
for(int i=0;i<n;++i)
++bucket[vec[i]/exp%BASE];
for(int i=1;i<BASE;++i)
bucket[i]+=bucket[i-1];
for(int i=n-1;i>=0;--i)
b[--bucket[vec[i]/exp%BASE]]=vec[i];
for(int i=0;i<n;++i){
vec[i]=b[i];
}
exp*=BASE;
}
}
int main(){
fscanf(fin,"%d ",&n);
for(int i=0;i<n;i++){
fscanf(fin,"%d ",&vec[i]);
maxv=max(vec[i],maxv);
}
radixSort();
for(int i=0;i<n;i++){
fprintf(fout,"%d ",vec[i]);
}
fclose(fin);
fclose(fout);
return 0;
}