基数排序就是按位数排序,最大数有n位就要进行n次入桶出桶;
原理如下:应该都懂
C++代码附上:看了几个代码,觉得还是自己写一下比较容易理解;
#include<iostream>
#include<vector>
#include<cmath>
#define max_length 100
using namespace std;
int a[max_length]={0};
int length;//数组长度
int maxD(int a[],int n)//得到数组中最大数的位数
{
int max=a[0];
for(int i=0;i<n;i++)
{
if(a[i]>max) max=a[i];
}
int d=0;
while(max)
{
max/=10;
d++;
}
return d;
}
void sort(int a[],int now_d)//now_d=当前位数
{
int factor=pow(10,now_d-1);
vector<int> bucket[10]; //初始化十个桶
for(int i=0;i<length;i++)
{
int temp=(a[i]/factor)%10;//得到a[i]的now_d位数,并放入对应桶中
bucket[temp].push_back(a[i]);
}
int j=0;
for(int i=0;i<10;i++)//遍历十个桶,按从小到大顺序放入原数组
{
int size=bucket[i].size();
for(int k=0;k<size;k++)
{
a[j++]=bucket[i][k];
}
bucket[i].clear();//桶置空
}
//test point
// for(int i=0;i<length;i++)
// cout<<a[i]<<' ';
// cout<<endl;
}
void basesort(int a[],int d)//d=最大数位数
{
int i=1;
for(;i<=d;i++)//从个位数排到d位数
{
sort(a,i);
}
}
int main()
{
cin>>length;
for(int i=0;i<length;i++)
{
cin>>a[i];
};
basesort(a,maxD(a,length));
for(int i=0;i<length;i++)//输出
cout<<a[i]<<' ';
return 0;
}
如有错误,感谢指正!