main.h
#include <iostream>
#include "list"
using namespace std;
//计算最大的数是几位数
int maxdigit(int data[], int num)
{
int d = 1;
int p = 10;
for(int i = 0; i < num; i++)
{
while(data[i] >= p)
{
p *= 10;
++d;
}
}
return d;
}
void radixSort(int data[], int num)
{
int digits = maxdigit(data, num);
//cout << digits << endl;
list<int> lists[10];
int i, j, k,factor;
for(i = 1, factor = 1; i <= digits; factor*=10,i++)
{
for(j=0; j < num; j++)
{
lists[(data[j]/factor)%10].push_back(data[j]); //放入对应链表中
}
//再将0-9对应的链表中的数拿出来放入原来的数组中去,为下一次循环做准备
for(j=k=0; j < 10; j++)
{
while(!lists[j].empty())
{
data[k++] = lists[j].front(); //依次取出链表中的元素,并删除
lists[j].pop_front();
}
}
}
}
int main()
{
int data[] = {179,208,306,93,859,984,55,9,271,33};
radixSort(data, 10);
for(int i = 0; i < 10; i++)
{
cout << data[i] << endl;
}
return 0;
}