/*根据输入,输出基数排序的每趟排序结果。
输入格式:输入数字为正整数,先输入排序数字个数,然后输入需要排序的数字序列。
输出:每趟排序结果。
要求:程序需要实现排序,其他可以使用stl包。*/
/*根据输入,输出基数排序的每趟排序结果。
输入格式:输入数字为正整数,先输入排序数字个数,然后输入需要排序的数字序列。
输出:每趟排序结果。
要求:程序需要实现排序,其他可以使用stl包。*/
#include<stdio.h>
#include<stdlib.h>
//取得最大值
int getmax(int array[],int n){
int mx=0;
for(int i=0;i<n;i++){
if(mx<array[i]){
mx=array[i];
}
}
return mx;
}
//对每位计数并且进行排序
//exp表示10的幂次方 初始为1
//计数数组初始为零 输出数组也为0
void numsort(int array[],int n,int exp){
int count[10]={0};
int output[n];
for(int i=0;i<n;i++){
count[(array[i]/exp)%10]++;
}
for(int i=1;i<10;i++){
count[i]+=count[i-1];
}
for(int i=n-1;i>=0;i--){
output[count[(array[i]/exp)%10]-1]=array[i];
count[array[i]/exp%10]--;
}
for(int i=0;i<n;i++){
array[i]=output[i];
//利用array输出
}
}
void print(int array[],int n){
for(int i=0;i<n;i++){
printf("%d",array[i]);
printf(" ");
}
}
int main(){
int array[]={2343,6,66,152310,5594,592783,27,8};
int n=sizeof(array)/sizeof(array[0]);
int m=getmax (array,n);
int exp;
for(exp=1;m/exp>0;exp*=10){
numsort(array,n,exp);
print(array,n);
printf("\n");
}
return 0;
}