JAVA语言之基数排序

11 篇文章 0 订阅

基数排序简而言之可以创建0~9余数共十个桶

代码如下:

public class jishu_1 {
public static void main(String[] args) {
int[] A=new int[]{54,35,48,36,27,12,44,44,8,14,26,17,28};
A=jishu_1.radixSort(A,13);
for(int i=0;i<13;i++){
System.out.print(A[i]+" ");
}
}
public static int[] radixSort(int[] A, int n) {
if(n<2 || A==null)return null;
//先创建一个二维数组,第一个[]表示有0~9个桶,第二个[]表示每个0~9的余数后面的数值
//用A.length表示是因为可能全部都是一样的余数
int[][] number =new int[10][A.length];
//再创建一个数组表示number数组的每一个桶里面的数目,数组默认初始化为0(int类型)
int[] count =new int[10];
//再补充一些,count数组的内容表示几个同样余数的作用
int a=1;//n表示每个数整除得到的整数
int m=1;//m表示指向的位数
int k=0;//k表示最后输出的结果
while(m<=4){
//第一个[]里面放lsd表示是余数为lsd的
//然后第二个[]放count[lsd]表示是这个余数为lsd的桶的数量
//因为lsd通过(A[j]/a)%10得到的范围是0~9
for(int j=0;j<A.length;j++){
    int lsd =((A[j]/a)%10);//这是得到余数
    number[lsd][count[lsd]]=A[j];
    count[lsd]++;//这里要++是因为第lsd个余数的第count[lsd]已经有数值了
}
 
for(int p=0;p<10;p++){
//这里循环遍历二维数组将按位数顺序将值重新放进数组A中
if(count[p]!=0)
//这里用count[p]来判断二维数组的第一个[]是否为0
for(int q=0;q<count[p];q++){
A[k]=number[p][q];
k++;
}
 count[p]=0;  
}
k=0;
a*=10;//开始十位的数字尾数比较
m++;
}  
return A;
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值