Pagini recente » Cod sursa (job #221731) | Cod sursa (job #1330540) | Cod sursa (job #339436) | Cod sursa (job #1489319) | Cod sursa (job #3327496)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream cin("radixsort.in");
ofstream cout("radixsort.out");
#define MAXN 500000
#define BASE 32
#define NRBITS 5
int v[MAXN],output[MAXN];
int frecv[BASE];
void radixSort(int arr[],int n){
if(n==0){
return;
}
int maxval = arr[0];
for(int i=1;i<n;i++){
if(arr[i]>maxval){
maxval=arr[i];
}
}
for(int exp=0;(maxval>>exp)>0;exp+=NRBITS){
memset(frecv,0,sizeof(frecv));
for(int i=0;i<n;i++){
frecv[(arr[i]>>exp)&(BASE-1)]++;
}
for(int i=1;i<BASE;i++) {
frecv[i]+=frecv[i-1];
}
for(int i=n-1;i>=0;i--){
output[--frecv[(arr[i]>>exp)&(BASE-1)]]=arr[i];
}
for(int i=0;i<n;i++){
arr[i]=output[i];
}
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>v[i];
}
radixSort(v,n);
for(int i=0;i<n;i++) {
cout<<v[i]<<" ";
}
cout<<"\n";
return 0;
}