[算法] 基数排序
参考: http://baike.baidu.com/view/1170573.htm
跟桶排序差不多,理解起来还行写起来难度很大(自己不会写),才发现桶排序也可以用2维数组来解决,
下面代码哪位大神写的,写的很好
int data[10]={73,22,93,43,55,14,28,65,39,81};
int temp[10][10]={0};//2维数组准备存放位数一样的数
int order[10]={0};
int i,j,k,n,lsd;
k=0;n=1;
printf("\n排序前: ");
for (i=0;i<10;i++) printf("%d ",data[i]);
putchar('\n');
while (n<=10){
for (i=0;i<10;i++){
lsd=((data[i]/n)%10); //n 第一次的时候 lsd是各位数,n 第二次的时候lsd是十位数,外层循环走两遍
temp[lsd][order[lsd]]=data[i]; //当lsd相同的时候,通过order[lsd]++来存放不同的地方
order[lsd]++;
}
printf("\n重新排列: ");
for (i=0;i<10;i++){
if(order[i]!=0)
for (j=0;j<order[i];j++){ //2维数组循环
data[k]=temp[i][j];
printf("%d ",data[k]);
k++;
}
order[i]=0;
}
n*=10;
k=0;
}
putchar('\n');
printf("\n排序后: ");
for (i=0;i<10;i++) printf("%d ",data[i]);