基数排序个人总结
作者:互联网
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int MaxNum=0;
int main(){
int n;
scanf("%d",&n);
int*a=(int*)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(MaxNum<a[i])
MaxNum=a[i];
}
int Num=0;
while(MaxNum){///find the bigest Numbersize
Num++;
MaxNum/=10;
}
int in=1;
int temp[n];
for(int z=0;z<Num;z++){//执行的次数是最大数位的基数
int Count[10]={0};
for(int i=0;i<n;i++){
Count[(a[i]/in)%10]++;//基数相同时候的数的个数
}
for(int j=1;j<10;j++)//import way 把每个基数个数加到后面其实就是对下面的求解A
Count[j]+=Count[j-1];
for(int j=n-1;j>=0;j--){
int k=a[j]/in%10;
temp[Count[k]-1]=a[j];//加上前面的基数个数其实就是找到此数应该有的位置
Count[k]--;
}
for(int j=0;j<n;j++)
a[j]=temp[j];
in*=10;
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
free(a);
}
for(int j=1;j<10;j++)//import way 把每个基数个数加到后面其实就是对下面的求解A
Count[j]+=Count[j-1];
for(int j=n-1;j>=0;j--){
int k=a[j]/in%10;
temp[Count[k]-1]=a[j];//加上前面的基数个数其实就是找到此数应该有的位置
Count[k]--;
}
最关键的
图片转载与菜鸟
标签:总结,Count,个人,int,--,基数排序,in%,include,此数 来源: https://blog.csdn.net/weixin_54095243/article/details/121399899