#include <iostream>
#include <list>
using namespace std;
void print(int data[], int n)
{
cout << "{ ";
for (int i = 0; i < n; i++)
{
cout << data[i] << " ";
}
cout <<" }"<< endl;
}
int maxdigit(int data[], int n)
{
int d = 1;
int p = 10;
for (int i = 0; i < n; ++i)
{
while (data[i] >= p)
{
p *= 10;
++d;
}
}
return d;
}
void RadixSort(int data[], int n)
{
int digits = maxdigit(data, n);//计算出最大数字的位数
//十进制需要十个链表
list<int> lists[10];
int d, j, k, factor;//利用factor提取个位,十位,百位等
for (d = 1, factor=1; d <= digits; d++,factor*=10)//digits是几就得循环几次
{
for (j = 0; j < n; j++)//循环数组中所以的数,进行基数排序
{
lists[(data[j] / factor)%10].push_back(data[j]);
}
for (j = k = 0; j < 10; j++)
{
while (!lists[j].empty())
{
data[k++] = lists[j].front();//从排序好的链表中取出数据放回原来数组
lists[j].pop_front();//取出一个数据之后删除一个
}
}
print(data, 10);
}
}
int main()
{
int data[10] = { 179, 208, 306, 93, 859, 984, 55, 9, 271, 33 };
RadixSort(data,10);
print(data, 10);
system("pause");
return 0;
}