基数排序其实很容易理解,根据每个位置的值按序排列,详细可以看百度百科------------基数排序-百度百科
代码:
#include<iostream>
#include<cstdlib>
#include<queue>
using namespace std;
void aToQueue(int *a,queue<int>que[],int n,int ans) // 按位数相同进入队列;
{
for(int i=0;i<n;i++){
int t=a[i]/ans%10;
que[t].push(a[i]);
}
}
void queueToA(int *a,queue<int>que[]) // 将队列中的数重新放回数组中;
{
int cnt=0;
for(int i=0;i<10;i++){
while(!que[i].empty()){
a[cnt++]=que[i].front();
que[i].pop();
}
}
}
int Max(int a[],int n) // 返回数组中最大的数的位数;
{
int largest=a[0];
for(int i=1;i<n;i++)
if(a[i]>largest)
largest=a[i];
int cnt=0;
while(largest>0){
cnt++;
largest/=10;
}
return cnt;
}
void radixSort(int *a,int n)
{
int cnt=Max(a,n);
queue<int>que[10];
int ans=1;
for(int i=0;i<cnt;i++){
aToQueue(a,que,n,ans); // 按基数入队;
queueToA(a,que); // 从队列中按序重新放回数组中;
ans*=10;
}
}
int main()
{
/*int a[10];
for(int i=0;i<10;i++)
a[i]=rand()%99999;
*/
int a[]={9,8,7,6,5,4,3,2,1,0};
radixSort(a,sizeof(a)/sizeof(a[0]));
for(int i=0;i<10;i++)
cout<<a[i]<<' ';
return 0;
}