奶奶的书给的代码好那啥呃,幸好有百科在。所谓基数排序,就是根据最大数字的位数,来分成单个位数排序,先排个位,后排十位,再……,具体就不多说了,网上都有讲,此法适用于位数少,数量大的数字排序。放码子: #include<iostream> #include<cmath> #include<cstring> using namespace std; const int nax=100; int coun[10],len;//对各位数字计数 int maxbit(int *dat,int n)//求最大位数,n个元素 { int i,tmp,bit_num=-1,t; for(i=0;i<n;i++) { t=0; tmp=dat[i]; while(tmp>0) { t++; tmp/=10; } if(bit_num<t) bit_num=t; } return bit_num; } void r_sort(int *dat,int n) { int bit_num=maxbit(dat,n); int i,tmp; int *tmp_dat; tmp_dat=new int[n]; int denominator=1; while(bit_num--)//最大有几位就排几次,从个位到最高位,位数不足的前边自动补0 { memset(coun,0,sizeof(coun)); for(i=0;i<n;++i) { tmp=dat[i]/denominator%10; ++coun[tmp]; } for(i=1;i<10;++i) coun[i]+=coun[i-1]; for(i=n-1;i>=0;--i) { tmp=dat[i]/denominator%10; --coun[tmp]; tmp_dat[coun[tmp]]=dat[i]; } for(i=0;i<n;i++) dat[i]=tmp_dat[i]; denominator*=10; } } int main() { int n,i; int dat[nax]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&dat[i]); r_sort(dat,n); for(i=0;i<n;i++) printf("%d ",dat[i]); return false; }