JAVA语言之基数排序
2016-05-02 22:55
471 查看
基数排序简而言之可以创建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; } }
相关文章推荐
- String abc=null;String abc="";String abc;三种写法有什么区别?
- 【GOF23设计模式】_工厂模式JAVA229-231
- Windows10 SpringMVC中需要使用setPath()才能保证cookie保存成功
- Spring3.1集成Quartz,让你的任务执行随心所欲
- Java线程池——FutureTask
- struts2入门到精通教程
- 适配器模式
- Java之Volatile关键字使用
- JSON格式数据解析(Java版)
- java连接mysql时用到的参数
- Java学习(十)
- SpringData 学习(7)—— 学习 Repository 接口的第 2 个子接口 PagingAndSortingRepository
- java利用classloader实现热部署
- java发送邮件
- Springboot+Maven多模块开发 (一)初始化工程(新建第一个web工程)
- java正则表达式去掉标点符号
- java锁的种类以及辨析
- java--XML概述
- HDU 1042 N! -- 求阶乘 java大法好
- HDU 1753 大明A+B -- java大法好