#include<iostream>
#include<cmath>
#include<queue>
using namespace std;
int main()
{
int numbers[11]={10,34,23,112,32,54,234,110,11220,9430,1234};
queue<int> que[10];
int m=0,max=numbers[0];
//求出数组中的最大元素
for(int i=1;i<11;i++){
max=numbers[i]>max?numbers[i]:max;
}
//求出数组中元素最多有多少位(即最大值max有多少位),存储在m当中
while(max){
max/=10;
m++;
}
int i,j,k,t;
//位数上限m决定了数字在队列(桶)中的放置要进行几轮
for(i=0;i<m;i++){
for(j=0;j<11;j++){
//k决定了目前遍历到的数字numbers[j]应当放置在哪一个队列(桶)中,k:0-9。
k=(int)(numbers[j]/pow(10,i))%10;
que[k].push(numbers[j]);
}
//一轮放置结束后,把所有队列(桶)中的数放回原数组,然后进行下一轮的放置
for(j=0,t=0;j<10;j++){
while(que[j].empty()==0){
int tmp=que[j].front();
que[j].pop();
numbers[t]=tmp;
t++;
}
}
}
//输出基数排序的结果
for(int i=0;i<11;i++)
cout<<numbers[i]<<endl;
}
基于队列的基数(桶)排序(C++实现)
猜你喜欢
转载自blog.csdn.net/cup160828/article/details/104539416
今日推荐
周排行