#include <iostream>
#include <cstring>
#define N 100005
using namespace std;
int n,a[N],tmp[N],cnt[20];
void radix_sort(int d){
int radix=1;
for(int k=1;k<=d;++k){
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;++i){
++cnt[(a[i]/radix)%10];
}
for(int i=0;i<10;++i){
cnt[i+1]+=cnt[i];
}
for(int i=n;i>=1;--i){
int t=(a[i]/radix)%10;
tmp[cnt[t]]=a[i];
--cnt[t];
}
for(int i=1;i<=n;++i){
a[i]=tmp[i];
}
radix*=10;
}
}
int num(int x){
int res=0;
while(x)x/=10,++res;
return res;
}
int main(){
cin>>n;
int maxx=-2e9;
for(int i=1;i<=n;++i){
cin>>a[i];
maxx=max(maxx,a[i]);
}
radix_sort(num(maxx));
for(int i=1;i<=n;++i){
cout<<a[i]<<" ";
}
// cout<<endl;
return 0;
}
若把radix_sort中的memset去掉,则会re,加上就ac。 但是在这个
for(int i=n;i>=1;--i){
int t=(a[i]/radix)%10;
tmp[cnt[t]]=a[i];
--cnt[t];
}
循环中,cnt数组不应该已经全部变为0了吗?
求解答