1 packageahe.sort;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6 importjava.util.LinkedList;7

8 /**

9 * 基数排序算法10 *11 *@authorJohness12 *13 */

14 public classRadixSort {15

16 /**主队列*/

17 private LinkedListmainQueue;18 /**子队列*/

19 private LinkedList[] subQueues;20 /**子队列个数,作用不大*/

21 private final int SIZE = 10;22 /**当前容器(主队列)中存储数值的最大位数*/

23 private intmaxDigits;24

25 /**构造函数*/

26 publicRadixSort() {27 mainQueue = new LinkedList();28 subQueues = newLinkedList[SIZE];29 for(int i = 0; i < SIZE; ++i)30 subQueues[i] = new LinkedList();31 maxDigits = 0;32 }33

34 /**向容器中(主队列)添加一个数值*/

35 public voidadd(Integer num) {36 int digits =String.valueOf(num).length();37 if (digits >maxDigits)38 maxDigits =digits;39 mainQueue.add(num);40 }41

42 /**排序*/

43 public voidsort() {44 for (int i = 1; i <= maxDigits; ++i) {45 while (mainQueue.size() > 0) {46 Integer element =(Integer) mainQueue.pop();47 String elementTmpStr =String.valueOf(element);48 if (elementTmpStr.length()

56 for (int j = 0; j < SIZE; ++j) {57 mainQueue.addAll(subQueues[j]);58 subQueues[j].clear();59 }60 //listMainQueue();

61 }62 }63

64 /*==============================================================================================*/

65 //以下方法为测试方法(以下方法来自于Arizona State University学校课后作业,本人只做翻译,如该资源侵犯了您的权益,请及时联系我)66 //您可以访问67 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/Assignment11.java

68 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/Sorting.java

69 //查看本文参考内容70 //本文输入输出对照表可从该课后作业中获得71 //输入表72 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/input1.txt

73 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/input2.txt

74 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/input3.txt

75 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/input4.txt

76 //输出表77 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/output1.txt

78 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/output2.txt

79 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/output3.txt

80 // https://courses.eas.asu.edu/cse205/current/assignments/assignment11/output4.txt

81 /*==============================================================================================*/

82 /**

83 * 列举(输出)主队列数据84 */

85 public voidlistMainQueue() {86 System.out.println("mainQueue = " + listQueue(mainQueue) + "\n");87 }88

89 /**

90 * 列举(输出)子队列数据91 */

92 public voidlistSubQueues() {93 String result = "";94 for (int i = 0; i < SIZE; i++) {95 result += "subQueue[" + i + "]:";96 result +=listQueue(subQueues[i]);97 result += "\n";98 }99 System.out.println(result);100 }101

102 /**

103 * 列举某队列中数据项104 *105 * 方法使用了一个临时队列来完成数据轮循106 * 先从目标队列中逐个取出(采用取出并删除的方式)放入临时队列并做列举操作(连接到返回字符串)107 * 待轮循完成后再将临时队列中的数据存入回目标队列108 *109 *@paramqueue 目标队列110 *@return包含目标队列中所有数据的字符串111 */

112 private String listQueue(LinkedListqueue) {113 LinkedList temp = new LinkedList();114 String result = "{ ";115

116 while (!queue.isEmpty()) {117 Integer removed =queue.remove();118 result += removed + " ";119 temp.offer(removed);120 }121 result += "}\n";122

123 while (!temp.isEmpty()) {124 Integer removed2 =temp.remove();125 queue.offer(removed2);126 }127 returnresult;128 }129

130 public static voidmain(String[] args) {131 charinput1;132 String inputInfo = newString();133 String line = newString();134

135 RadixSort sort1 = newRadixSort();136

137 try{138 //打印菜单

139 printMenu();140

141 //创建流读取器读取用户输入

142 InputStreamReader isr = newInputStreamReader(System.in);143 BufferedReader stdin = newBufferedReader(isr);144

145 do{146 System.out.print("你想进行什么操作?\n");147 line = stdin.readLine().trim(); //读取一行

148 input1 = line.charAt(0);149 input1 =Character.toUpperCase(input1);150

151 if (line.length() == 1) //检查输入指令是否为单个152 //字符

153 {154 switch(input1) {155 case 'A': //添加一个数值

156 System.out.print("请输入要添加的数值:\n");157 inputInfo =stdin.readLine().trim();158 int num =Integer.parseInt(inputInfo);159 sort1.add(num);160 System.out.print("数值添加成功\n");161 break;162 case 'L': //列举数值

163 sort1.listMainQueue();164 break;165 case 'Q': //退出

166 break;167 case 'S': //排序

168 sort1.sort();169 System.out.print("排序完成\n");170 break;171 case '?': //显示帮助

172 printMenu();173 break;174 default:175 System.out.print("未知指令\n");176 break;177 }178 } else{179 System.out.print("未知指令\n");180 }181 } while (input1 != 'Q' || line.length() != 1);182 } catch(IOException exception) {183 System.out.print("IO Exception\n");184 }185 }186

187 /**打印控制台界面(菜单)*/

188 public static voidprintMenu() {189 System.out.print("选项\t\t动作\n" + "------\t\t------\n"

190 + "A\t\t添加一个数值\n" + "L\t\t列举队列\n"

191 + "Q\t\t退出\n" + "S\t\t排序数据\n"

192 + "?\t\t显示帮助\n\n");193 }194 }

java实现数据结构基数排序_数据结构与算法——基数排序简单Java实现相关推荐

  1. java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)

    RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...

  2. java语言程序设计你_清华大学出版社-图书详情-《Java语言程序设计》

    前言 Java语言是一种典型的面向对象的.跨平台的.支持分布式和多线程的优秀编程语言,具有极强的扩展性.自其诞生以来,迅速被业界认可并广泛应用于Web应用程序的开发中.在此形势下,国内高校在计算机及相 ...

  3. java.policy无法修改_如何配置Policy文件进行Java安全策略的设置

    中国人最喜欢访问的网站 只要注册ofo就送你10块钱,还等什么,快来注册吧 Java语言具有完善的安全框架,从编程语言.编译器.解释程序到Java虚拟机,都能确保Java系统不被恶意的代码或敌对的编译 ...

  4. 为什么java中floatda正确_为什么cast to float在java中产生正确的结果?

    文档没有特别好地解释,但 Double.toString(double)基本上在它产生的输出中执行一些舍入. Double.toString算法在整个Java SE中使用,包括例如System.out ...

  5. java一致性hash api_一致性哈希算法学习及JAVA代码实现分析

    戳上面的蓝字关注我们哦! 本文作者:hapjin 欢迎点击下方阅读原文 1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式 ...

  6. 中秋节图案 用java代码打出来_这个中秋,我用 Java 画了一个月饼!

    栈长代表微信公众号 "Java技术栈" 祝所有粉丝中秋佳节快乐! 为了用一种特殊的方式表达我的心意,去年中秋节,我写了这篇文章: 没错,去年一天,我学了 20 种编程语言,刺激.. ...

  7. java生成pdf图表_开发员指南:使用Java图表转换为PDF/JPG等图像

    Aspose.Cells for JavaExcel电子表格处理API,它允许Java开发人员在自己的Java应用程序中嵌入可读取.写入和操作Excel电子表格的能力,而无需依赖Microsoft E ...

  8. java泛型 简书_一文带你认识Java泛型基础

    Java泛型基础 1. 认识泛型 泛型是在JDK1.5之后增加的新功能. 泛型可以解决数据的安全性问题, 主要的原理是在类声明的时候通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型. ...

  9. mac上java文件如何编译_如何在Mac上用Java编译和运行程序?

    小编典典 在Mac OSX或任何主要操作系统上编译和运行Java应用程序非常容易.Apple随OSX一起提供了一个功能齐全的Java运行时和开发环境,因此您要做的就是编写Java程序并使用内置工具来编 ...

  10. java编程最新图书_清华大学出版社-图书详情-《Java程序设计》

    前言 Java是一种完全面向对象的程序设计语言,具有卓越的通用性.高效性.平台移植性和安全性,得到广泛的应用.在全球云计算和移动互联网产业高速发展的环境下,Java具备显著的优势和广阔前景.本书以Ja ...

最新文章

  1. java变量存储位置_java 中变量存储位置的区别
  2. JDK源码分析 NIO实现
  3. STM32 之十六 深入了解 ADC 工作原理及参考电压变动的影响
  4. RabbitMQ fanout交换机(生产者)
  5. 2021宿州市地区高考成绩排名查询,2021年宿州市所有的高中排名,宿州市高中高考成绩排名出炉...
  6. 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序
  7. linux shell脚本关于文件存在与否的判断
  8. ExcelPackage 读取、导出excel
  9. 【零基础学Java】—Scanner类的使用( 十)
  10. lsqcurvefit拟合结果为复数_使用科学计算器计算复数与相量(提高篇)
  11. 关于可达矩阵的O(N*N)算法和强分图的O(E)算法
  12. Au:突发性噪音降噪方法
  13. 编译OpenJDK8并生成CodeQL数据库
  14. QT创建一个excel文件(通过save as 方法)
  15. 越狱苹果手机导出网易云音乐歌曲(以及缓存文件转换)
  16. 当今程序员很厉害?不!那是你不了解上古时期的那些神级操作
  17. Pytorch安装教程 及 解决 torch.cuda.is_available() 返回 False 的问题
  18. struct模块使用
  19. HBase 集成 Phoenix 构建二级索引实践
  20. 兆芯服务器芯片,兆芯 ZX-200 IO扩展芯片

热门文章

  1. 百度地图api实现轨迹运动效果
  2. matlab_app实现一个简单的色彩分析可视化程序
  3. led-led paths_LED时刻的重要性-我做到了
  4. 使用FMDB进行数据库操作
  5. ros msg文件数组定义与使用
  6. [行业动态] 阿里入股新浪对蘑菇街、美丽说的冲击
  7. 511遇见易语言学习易语言常量
  8. 实现Web端指纹登录
  9. 武汉市申请国家现代农业产业科技创新中心发展奖励标准及申请要求
  10. 数据质量问题是大数据应用的关键