使用队列
#include<bits/stdc++.h>
using namespace std;
//基数排序:从小到大
template<class T>
void RadixSort(T a[], int n)
{
queue<T> que[10];
//确定回合数R
int R =0;
T mx = a[0];
for(int i = 1; i < n; i++) //找最大值mx
mx = max(a[i], mx);
while(mx)
{
R++;
mx /= 10;
}
//cout<<"R="<<R<<endl; //***
//基数排序
int d = 1;
for(int i = 1; i <= R; i++)
{
//将数据分配到10个队列中
for(int j = 0; j < n; j++)
{
int t = a[j] / d % 10;
que[t].push(a[j]);
}
d *= 10;
//收集10个队列里的数据
int p = 0;
for(int j = 0; j < 10; j++)
{
while(que[j].size())
{
a[p++] = que[j].front();
que[j].pop();
//cout<<a[p-1]<<" "; //***
}
//cout<<endl; //***
}
}
}
int main()
{
int a[10];
int len;
cin >> len;
for (int i = 0; i < len; i++)
{
cin >> a[i];
}
RadixSort(a, len);
for (int i = 0; i < len; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
/*
测试
10
2 8 6 7 5 4 3 1 0 9
*/