运行结果正确
桶是用队列实现的
完整代码(审核中)
主要代码
#include"队列声明.h"
void tra_arr(int arr[],int n);
void get_pos_value(int in,int pos,int &result);
void base_sort(int arr[],int n,int pos_num);
int main(){
int arr[10]={
999,888,777,66,55,44,3,2,1,33
};
base_sort(arr,10,3);
tra_arr(arr,10);
return 0;
}
//基数排序,适用于桶比较多的场合
//首先,先写一个提取某一位的函数
void get_pos_value(int in,int pos,int &result){
int temp=1;
for(int i=1;i<pos;i++){
temp=temp*10;
}
result=(in/temp)%10;
}
//这里的桶我们用队列实现
void base_sort(int arr[],int n,int pos_num){
//建一个队列的数组
que_point q[10];
for(int i=0;i<10;i++){
init(q[i]);
}
//对每一位进行判断,先从个位开始
int result;
for(int i=1;i<=pos_num;i++){
//对arr的每一项进行判断
for(int j=0;j<n;j++){
//取个位
get_pos_value(arr[j],i,result) ;
//塞进桶里
push(q[result],arr[j]);
}
//上面走完,个位已经排好了,现在按顺序取出来
//先遍历10个桶
int result1;
int start=0;
for(int k=0;k<10;k++){
//然后遍历桶里面的东西
while(!is_empty(q[k])){
del(q[k],result1);
arr[start++]=result1;
}
}
}
}
//遍历数组
void tra_arr(int arr[],int n){
for(int i=0;i<n;i++){
printf("%d ",arr[i]);
}
printf("\n");
}