RT,记录
代码:
#include<bits/stdc++.h>
using namespace std;
template<typename T>
vector<T> radixsort(vector<T> nums){
#define radix 8
vector<T> cnt(1<<radix,0);
vector<T> u1(nums.size(),0);
vector<T> u2(nums.size(),0);
T basic=1<<radix,lbasic=-radix;
u2=nums;
int sz=nums.size();
while(1){
lbasic+=radix;
cnt=vector<T>(1<<radix,0);
for(auto i:u2)
++cnt[(i>>lbasic)&(basic-1)];
for(auto i:cnt)
if(i==sz)return u2;
for(auto i=(cnt.size()-cnt.size()+1);i<cnt.size();++i)cnt[i]+=cnt[i-1];
for(auto i=cnt.size()-1;i>=1;--i)cnt[i]=cnt[i-1];
for(auto i:u2)
u1[cnt[(i>>lbasic)&(basic-1)]++]=i;
u2=u1;
}
#undef radix
}
int main(){
int n;
scanf("%d",&n);
vector<int>v(n);
for(int i=0;i<n;++i)scanf("%d",&v[i]);
v=radixsort(v);
for(auto i:v)printf("%d ",i);
return 0;
}
不明白为什么会变成这样。