java基数排序简单实现_基数排序简单Java实现
1 package ahe.sort;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.util.LinkedList;
7
8 /**
9 * 基数排序算法
10 *
11 * @author Johness
12 *
13 */
14 public class RadixSort {
15
16 /** 主队列 */
17 private LinkedList mainQueue;
18 /** 子队列 */
19 private LinkedList[] subQueues;
20 /** 子队列个数,作用不大 */
21 private final int SIZE = 10;
22 /** 当前容器(主队列)中存储数值的最大位数 */
23 private int maxDigits;
24
25 /** 构造函数 */
26 public RadixSort() {
27 mainQueue = new LinkedList();
28 subQueues = new LinkedList[SIZE];
29 for(int i = 0; i < SIZE; ++i)
30 subQueues[i] = new LinkedList();
31 maxDigits = 0;
32 }
33
34 /** 向容器中(主队列)添加一个数值 */
35 public void add(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 void sort() {
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() < i) {
49 subQueues[0].add(element);
50 continue;
51 }
52 int digit = elementTmpStr.charAt(elementTmpStr.length() - i) - '0';
53 subQueues[digit].add(element);
54 }
55 //listSubQueues();
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 void listMainQueue() {
86 System.out.println("mainQueue = " + listQueue(mainQueue) + "\n");
87 }
88
89 /**
90 * 列举(输出)子队列数据
91 */
92 public void listSubQueues() {
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 * @param queue 目标队列
110 * @return 包含目标队列中所有数据的字符串
111 */
112 private String listQueue(LinkedList queue) {
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 return result;
128 }
129
130 public static void main(String[] args) {
131 char input1;
132 String inputInfo = new String();
133 String line = new String();
134
135 RadixSort sort1 = new RadixSort();
136
137 try {
138 // 打印菜单
139 printMenu();
140
141 // 创建流读取器读取用户输入
142 InputStreamReader isr = new InputStreamReader(System.in);
143 BufferedReader stdin = new BufferedReader(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 void printMenu() {
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实现相关推荐
- java 语言 写字板_一个简单的java语言写字板.docx
一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...
- java单机应用程序_一个简单的java桌面应用:单机版IFTTT
1.项目背景: ifttt是"if this then that"的缩写,事实上是让你的网络行为能够引发连锁反应.让你使用更为方便.ifttt旨在帮助人们利用各网站的开放API,将 ...
- 新手学java 学哪方面_初学者学Java应从哪些方面学习?
原标题:初学者学Java应从哪些方面学习? Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.那么,初学者学Java应从哪些方面学 ...
- java 流的概念_举例讲解Java中的Stream流概念
1.基本的输入流和输出流 流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用&qu ...
- java的移植性_详细介绍JAVA的可移植性
软件可移植性指与软件从某一环境转移到另一环境下的难易程度.为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境.尽量不用与系统的底层相关性强的语言.下面介绍JAVA的可移植性. 1 ...
- java的弱引用_深入理解Java中的弱引用
不久之前,我面试了一些求职Java高级开发工程师的应聘者.我常常会面试他们说,"你能给我介绍一些Java中得弱引用吗?",如果面试者这样说,"嗯,是不是垃圾回收有关的?& ...
- java不同垃圾回收器_细述 Java垃圾回收机制→Types of Java Garbage Collectors
本文非原创,翻译自Types of Java Garbage Collectors 在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的.和C语言不一样的是Java程序员不需要手动写垃 ...
- java 集成开发工具_最好的Java开发人员测试和集成工具
java 集成开发工具 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 无论您是刚刚起步还是已经从事了一段时间,使用正确的工具进行编程都可 ...
- java 不同类型 映射_如何使用Java泛型映射不同的值类型
java 不同类型 映射 有时,一般的开发人员会遇到这样的情况,即他必须在特定容器内映射任意类型的值. 但是,Java集合API仅提供与容器相关的参数化. 例如,这将HashMap的类型安全使用限制为 ...
- java整数的因式分解_如何在Java中找到整数的质数-因式分解
java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...
最新文章
- 送你一份不正经的深度学习简述(附论文)
- java如何添加同名的xml节点_jaxb怎么解析多个同名元素
- c++ abort 函数_C ++中带有示例的abort()函数
- 组播穿越MPLS ***+SSM
- nxos启动的初始化和https访问nx-api
- LCFinder 0.3.0 Beta 发布,图像标注与目标检测工具
- 剑指offer之二叉搜索树的第K个结点
- Nginx教程负载均衡机制
- 辐流式重力浓缩池计算_污泥浓缩池工作方式
- 用 js 写的 WebSocketHeartBeat,心跳检测
- android 显示flash视频播放器
- IT行业技术部门人员架构设计
- K8S各种各样的证书介绍
- Java基础:常用类(String类)
- rainmeter频谱动效和动态挂件
- BZOJ4987:Tree(树形DP)
- 吴军《数学之美》-读书笔记
- Deepin系统打开WiFi就不能开热点?三个步骤解决问题
- 数据结构 严薇敏 队列 的实现及其使用方法详解
- 使用jquery制作漂亮相册集
热门文章
- 原力计划·精英季来了!第一周周榜揭晓,你喜欢的博主上榜了吗?
- 指令集物联网操作系统 iSysCore OS 2021年将推出 3.0 版本!
- OPPO 人像视频黑科技新鲜出炉,下月就换手机!
- 响应式布局技术:App如何适配不同尺寸的设备
- 真的,没人能逃开“真香定律”
- 2020 美国大选在即,又到了 AI 花式打击假新闻的季节
- 图解!24 张图彻底弄懂九大常见数据结构!
- 首提“智能X效应”,英特尔携手产业加速智能变革
- 阿里云智能开放平台团队何登成:解码云计算的 2B 服务基因 | 问底中国 IT 技术演进...
- 为什么Linux CFS调度器没有带来惊艳的碾压效果? | CSDN博文精选