JAVA语言之基数排序

基数排序简而言之可以创建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;
}
}


你可能感兴趣的:(JAVA语言之基数排序)