JAVA语言之基数排序

来源:互联网 发布:数据分析项目案例 编辑:程序博客网 时间:2024/04/30 10:21

基数排序简而言之可以创建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~9for(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]来判断二维数组的第一个[]是否为0for(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