版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/88084592
#include<cstdio>
#include<cstdlib>
#include<ctime>
const int num=20;//元素个数
const int R=5;//基数
int arr[num];//待排序数组
void key_index_counting(){
int count[R+1]={0};
int aux[num]={0};//辅助数组
for(int i=0;i<num;i++){//计算出现的频率
count[arr[i]+1]++;
}
for(int r=0;r<R;r++){//将频率转换为索引
count[r+1]+=count[r];
}
for(int i=0;i<num;i++){//将元素分类
aux[count[arr[i]]++]=arr[i];
}
for(int i=0;i<num;i++){//回写
arr[i]=aux[i];
}
}
int main(){
srand((long long)time(NULL));
printf("生成随机数据:\n");
for(int i=0;i<num;i++){
arr[i]=rand()%R;
}
for(int i=0;i<num;i++){
printf("%d ",arr[i]);
}
printf("\n\n排序后的数据:\n");
key_index_counting();
for(int i=0;i<num;i++){
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}