#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
int bit(int data[],int n)
{
int b=1;
int max=data[0];
for(int i=1;i<n;i++)
{
if(max<data[i])
{
max=data[i];
}
}
while(max>=10)
{
max=max/10;
b++;
}
return b;
}
void sort(int data[],int n)
{
int i,j,k;
int b=bit(data,n);
int *count=new int[10];//数字桶
int *tmp=new int[n];//过渡数组
int step=1;//进位控制
for(i=0;i<b;i++)
{
for(j=0;j<10;j++)
{
count[j]=0;//数字桶初始化为0
}
for(j=0;j<n;j++)
{
k=(data[j]/step) %10;//数据的桶号
count[k]++;//桶中数据加1
}
for(j=1;j<10;j++)
{
count[j]=count[j-1]+count[j];//把桶串联起来
}
for(j=n-1;j>=0;j--)
{
k=(data[j]/step)%10;
tmp[count[k]-1]=data[j];//串联桶放入过渡数组
count[k]--;//数字桶数据个数减1
}
for(j = 0; j < n; j++) //将临时数组的内容复制到data中
data[j] = tmp[j];
step = step * 10;
}
for(j = 0; j < n; j++) //显示最终排序
{
cout<<tmp[j]<<endl;
}
delete []tmp;
delete []count;
}
int main()
{
int a[6]={42,1,8,36,995,1000};
sort(a,6);
}