Java用栈实现排序_Java中的栈排序
本篇博客是上一篇博客的延续。在实现图论算法的过程中,需要对栈中的元素进行排序。我使用的是双栈排序算法,实现的是将栈中的元素按从大到小的顺序排列,现将该算法的思路总结如下:
1、算法主要涉及到两个栈,stackSrc和stackDes。stackSrc是原始存储数据的栈,简称源栈;stackDes是用来存储排序之后元素的栈,简称目的栈。
2、首先判断源栈stackSrc是否为空,如果为空,则抛出异常NoSuchElementException。
3、如果源栈非空,则进入while循环,while循环执行的条件是源栈stackSrc非空,在while循环之中,将stackSrc的首元素出栈并赋给中间变量minInt,然后嵌套一个while循环,此while循环的作用是将目的栈stackDes中的首元素和minInt比较,如果minInt的值大于或等于目的栈首元素的值,则直接将minInt压入目的栈,跳出这一层while循环,继续执行最外层while循环。
4、如果minInt的值比目的栈首元素小,则目的栈栈首元素出栈,并将压入源栈,然后将minInt与目的栈的下一个首元素比较,直到不满足循环条件为止,跳出循环。第二个while循环执行的条件是目的栈不为空并且minInt的值比目的栈首元素小。在此,还需注明一点,当目的栈为空时,将minInt值直接压入目的栈。
5、按照上述思路,使用两层while循环可以确保源栈中每个元素均与目的栈中的每个元素作比较,最终排出正确的从大到小的元素顺序存储在目的栈中。
下面就是实现上述双栈排序算法的源代码:
class StackSort {
/**
* sort the stack in descending array return a reference of a stack
*/
public static Stack stacksort(Stack stackSrc) {
//creats an destination Stack object
Stack stackDes = new Stack();
//temp variable
int minTemp;
if (stackSrc.size() == 0) {
//throw exception
throw new NoSuchElementException("所要排序的栈为空栈!");
} else {
while (stackSrc.size() != 0) {
//record the top element of the stack
minTemp = stackSrc.pop();
//compare every element in stackDes with
//minTemp to find the min element
while ((stackDes.size() != 0) && (stackDes.peek() > minTemp)) {
//push the bigger element into stackSrc
stackSrc.push(stackDes.pop());
}
//push the smaller element into stackDes
stackDes.push(minTemp);
}
}
return stackDes;
}
}
Java用栈实现排序_Java中的栈排序相关推荐
- java什么是栈和堆_JAVA中的栈和堆
JAVA在程序运行时,在内存中划分5片空间进行数据的存储.分别是:1:寄存器.2:本地方法区.3:方法区.4:栈.5:堆. 基本,栈stack和堆heap这两个概念很重要,不了解清楚,后面就不用学了. ...
- java util 排序_Java中常见的排序方法
本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...
- java 排序_Java中常见的排序算法有哪些?---选择排序
排序相关的的基本概念 排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域, 即多个数据 ...
- java中queue排序_Java中常见的排序算法有哪些?---选择排序
排序相关的的基本概念 排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域, 即多个数据 ...
- java map 自动排序_Java中Map的排序
Map的种类 在Java中,Map的主要作用是存储键值对.由于是根据键得到值,所以不允许键重复.它主要有如下几个类别: HashMap: 最常用的Map,它根据键的HashCode值存储数据,根据键可 ...
- java合并排序_Java中的合并排序算法
合并排序算法是一种分而治之的算法.在分而治之的范式中,一个问题被分解成较小的问题,其中每个小问题仍然保留着大问题的所有属性--大小除外.为了解决原始问题,每个部分都是单独解决的,然后这些部分又合并在一 ...
- java自然排序_Java中的自然排序顺序字符串比较 - 是内置的吗?
String实现了Comparable,这就是Java中的自然顺序(使用类似的接口进行比较).您可以将字符串放在TreeSet中,也可以使用Collections或Arrays类进行排序. 但是,在您 ...
- java线程排序_Java中的并发排序
我目前正在开发一个程序来同时对字符串进行排序.我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组.然后,程序为每个较小的数组启动一个线程,并对它们进行快速排序.每个 ...
- java list 排序_Java中List的排序
场景 Bean定义如下,仅有一个类型为Integer的age字段. @NoArgsConstructor @AllArgsConstructor(staticName = "of" ...
最新文章
- 发布一个持续集成的npm包并加上装逼小icon
- c语言sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美
- 英文Ubuntu安装中文包(locale)的方法
- python 等值线 标注 间距、控制_python - Matplotlib-Contourf-如何使刻度线间距不均匀? - 堆栈内存溢出...
- 遗传算法求解背包问题
- 做CV和做NLP,是否都有光明的未来?
- 常见的注册界面实现的效果
- mongodb MapReduce
- [Codeforces 487E]Tourists
- volley全然解析
- ARCore快速入门--在模拟器(Emulator)上运行AR应用
- zigbee终端向多个协调器发起请求的思路(终端入网流程分析)
- 网页提示504 gateway time-out是什么意思?如何解决?
- 1041. 考试座位号
- 华夏文化-让你心醉又心碎的陶笛--故乡的原风景
- 盘点2016年人工智能与深度学习领域的十大收购
- 基于Docker离线部署开源视频会议系统Jitsi-Meet
- iOS 11 发布!巨大进步、里程碑式飞跃!
- Android自定义相机镂空遮罩
- tomcat服务器连接数问题解决
热门文章
- Web 3D集成开发环境【nunuStudio中文版】
- 一触即达!佰达慧兴携新风向标开展新零售电商产业升级
- 菲中工商贸投资合作签约活动在京举办
- 解决关于VS2019输入会顶掉后面字符的问题
- 【接口篇 / Wan】(5.2) ❀ 04. 多条宽带冗余 ❀ FortiGate 防火墙
- 怀孕也就36-40周足够,而芯片54周交期伤心欲绝了!
- 一招解决python pip install 安装库失败
- 摄像头拍摄视频,保存视频,并将视频保存为图片
- 浅谈SVG的两个黑魔法
- python pyside简单布局_PySide2/PyQt5的4种基础布局管理