题目:用基数排序法给n个数排序,每个元素不超过100000
输入要求:
There are multiple cases.
For each case, the first line is an integer n. The next line contains a[i] (1<=i<=n, 1<=a[i]<=100000) to be sorted.
基数排序,我们按照低位到高位的数字一位位运算,依次入队出队。
下面来模拟一下该过程,比如初始序列是91 6 85 15 92 35 30 22 39,我们先给低位排序,
第一次排序:
出队后序列为30 91 92 22 85 15 35 6 39,下面我们再来给高位排序,
第二次排序:
出队后序列为6 15 22 30 35 39 85 91 92
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int *a = new int[n];
queue<int> q[10]; //10个对应于位的队列
for(int i=0;i<n;i++)
cin >> a[i];
for(int pos=1; pos<=6; pos++)
{
for(int i=0;i<n;i++){ //按位取数入栈
int getp, temp=1, num=a[i];
for (int i = 0; i < pos - 1; i++)
temp *= 10;
getp = (num/temp) % 10;
q[getp].push(a[i]);
}
int k=0;
for(int i=0;i<10;i++)
{
while(!q[i].empty()){ //先取队首元素保存在数组,再出栈
a[k++] = q[i].front();
q[i].pop() ;
}
}
}
for(int i=0;i<n-1;i++)
cout << a[i] <<" ";
cout << a[n-1] << endl; //末尾没有空格
delete []a;
}
return 0;
}