代码是用queue实现的基数排序,其中arrlength表示数组长度,maxbit表示arr数组中int型整数的最大位数,如果maxbit=3,表示最大为3位数,即不超过999
/**************************************
/* <FUNC>
/* 函数名 : Radix Sort
/* </FUNC>
***************************************/
#include <iostream>
#include <queue>
using namespace std;
//用queue实现的基数排序
//arrlength表示数组长度
//maxbit表示arr数组中int型整数的最大位数,如果maxbit=3,表示最大为3位数,即不超过999
void RadixSort_queue(int arr[], int arrlength, int maxbit)
{
queue<int> arrqueue,q0,q1,q2,q3,q4,q5,q6,q7,q8,q9;
for(int ii = 0; ii < arrlength; ++ii)
arrqueue.push(arr[ii]);
int thecurrentnum;
int radix = 1;
for(int j = 1; j <= maxbit; ++j)
{
while(!arrqueue.empty())
{
thecurrentnum = arrqueue.front();
arrqueue.pop();
int num = (thecurrentnum/radix)%10;
switch (num)
{
case 0: q0.push(thecurrentnum);break;
case 1: q1.push(thecurrentnum);break;
case 2: q2.push(thecurrentnum);break;
case 3: q3.push(thecurrentnum);break;
case 4: q4.push(thecurrentnum);break;
case 5: q5.push(thecurrentnum);break;
case 6: q6.push(thecurrentnum);break;
case 7: q7.push(thecurrentnum);break;
case 8: q8.push(thecurrentnum);break;
case 9: q9.push(thecurrentnum);break;
}
}
//把数据再放回queue
while(!q0.empty()){thecurrentnum = q0.front();q0.pop();arrqueue.push(thecurrentnum);}
while(!q1.empty()){thecurrentnum = q1.front();q1.pop();arrqueue.push(thecurrentnum);}
while(!q2.empty()){thecurrentnum = q2.front();q2.pop();arrqueue.push(thecurrentnum);}
while(!q3.empty()){thecurrentnum = q3.front();q3.pop();arrqueue.push(thecurrentnum);}
while(!q4.empty()){thecurrentnum = q4.front();q4.pop();arrqueue.push(thecurrentnum);}
while(!q5.empty()){thecurrentnum = q5.front();q5.pop();arrqueue.push(thecurrentnum);}
while(!q6.empty()){thecurrentnum = q6.front();q6.pop();arrqueue.push(thecurrentnum);}
while(!q7.empty()){thecurrentnum = q7.front();q7.pop();arrqueue.push(thecurrentnum);}
while(!q8.empty()){thecurrentnum = q8.front();q8.pop();arrqueue.push(thecurrentnum);}
while(!q9.empty()){thecurrentnum = q9.front();q9.pop();arrqueue.push(thecurrentnum);}
radix *= 10;
}
int i= 0;
while(!arrqueue.empty())
{
thecurrentnum = arrqueue.front();
arrqueue.pop();
arr[i++] = thecurrentnum;
cout<<thecurrentnum<<" ";
}
cout<<endl;
}
int main(int argc, char* argv[])
{
int x9[12] = {13, 10, 543, 172, 23, 171, 18, 15, 31, 125, 5, 88};
RadixSort_queue(x9, 12, 3);
return 0;
}