本篇博客是上一篇博客的延续。在实现图论算法的过程中,需要对栈中的元素进行排序。我使用的是双栈排序算法,实现的是将栈中的元素按从大到小的顺序排列,现将该算法的思路总结如下:

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中的栈排序相关推荐

  1. java什么是栈和堆_JAVA中的栈和堆

    JAVA在程序运行时,在内存中划分5片空间进行数据的存储.分别是:1:寄存器.2:本地方法区.3:方法区.4:栈.5:堆. 基本,栈stack和堆heap这两个概念很重要,不了解清楚,后面就不用学了. ...

  2. java util 排序_Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...

  3. java 排序_Java中常见的排序算法有哪些?---选择排序

    排序相关的的基本概念 排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域, 即多个数据 ...

  4. java中queue排序_Java中常见的排序算法有哪些?---选择排序

    排序相关的的基本概念 排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域, 即多个数据 ...

  5. java map 自动排序_Java中Map的排序

    Map的种类 在Java中,Map的主要作用是存储键值对.由于是根据键得到值,所以不允许键重复.它主要有如下几个类别: HashMap: 最常用的Map,它根据键的HashCode值存储数据,根据键可 ...

  6. java合并排序_Java中的合并排序算法

    合并排序算法是一种分而治之的算法.在分而治之的范式中,一个问题被分解成较小的问题,其中每个小问题仍然保留着大问题的所有属性--大小除外.为了解决原始问题,每个部分都是单独解决的,然后这些部分又合并在一 ...

  7. java自然排序_Java中的自然排序顺序字符串比较 - 是内置的吗?

    String实现了Comparable,这就是Java中的自然顺序(使用类似的接口进行比较).您可以将字符串放在TreeSet中,也可以使用Collections或Arrays类进行排序. 但是,在您 ...

  8. java线程排序_Java中的并发排序

    我目前正在开发一个程序来同时对字符串进行排序.我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组.然后,程序为每个较小的数组启动一个线程,并对它们进行快速排序.每个 ...

  9. java list 排序_Java中List的排序

    场景 Bean定义如下,仅有一个类型为Integer的age字段. @NoArgsConstructor @AllArgsConstructor(staticName = "of" ...

最新文章

  1. 发布一个持续集成的npm包并加上装逼小icon
  2. c语言sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美
  3. 英文Ubuntu安装中文包(locale)的方法
  4. python 等值线 标注 间距、控制_python - Matplotlib-Contourf-如何使刻度线间距不均匀? - 堆栈内存溢出...
  5. 遗传算法求解背包问题
  6. 做CV和做NLP,是否都有光明的未来?
  7. 常见的注册界面实现的效果
  8. mongodb MapReduce
  9. [Codeforces 487E]Tourists
  10. volley全然解析
  11. ARCore快速入门--在模拟器(Emulator)上运行AR应用
  12. zigbee终端向多个协调器发起请求的思路(终端入网流程分析)
  13. 网页提示504 gateway time-out是什么意思?如何解决?
  14. 1041. 考试座位号
  15. 华夏文化-让你心醉又心碎的陶笛--故乡的原风景
  16. 盘点2016年人工智能与深度学习领域的十大收购
  17. 基于Docker离线部署开源视频会议系统Jitsi-Meet
  18. iOS 11 发布!巨大进步、里程碑式飞跃!
  19. Android自定义相机镂空遮罩
  20. tomcat服务器连接数问题解决

热门文章

  1. Web 3D集成开发环境【nunuStudio中文版】
  2. 一触即达!佰达慧兴携新风向标开展新零售电商产业升级
  3. 菲中工商贸投资合作签约活动在京举办
  4. 解决关于VS2019输入会顶掉后面字符的问题
  5. 【接口篇 / Wan】(5.2) ❀ 04. 多条宽带冗余 ❀ FortiGate 防火墙
  6. 怀孕也就36-40周足够,而芯片54周交期伤心欲绝了!
  7. 一招解决python pip install 安装库失败
  8. 摄像头拍摄视频,保存视频,并将视频保存为图片
  9. 浅谈SVG的两个黑魔法
  10. python pyside简单布局_PySide2/PyQt5的4种基础布局管理