该栈支持如下操作:push, pop, peek,和isEmpty

如果可以支持两个栈,我们可以每一次遍历栈1,将最小的元素放入栈2,把栈3作为搜索时的缓冲区

但是这里只能使用一个额外栈,那是不是就没有办法了呢?不是的

我们不需要反复搜索栈1来依次获得最小值,假设栈s是要排序的栈,栈r是已排序的栈

s = [5,10,7]

r = [12,8 ,3,1]

栈顶元素5在r中的正确位置应该是3的上面,我们可以先弹出5,反正5是无论如何都要从s压入r的,然后将12和8压入栈s,然后将5压入栈r

注意这是12和8没有在r中了,但是只要我们不改变它们在s中的顺序,重复上面的步骤,12和8一次从s弹出再压入r还是在5的上面,r依然是有序的。

时间复杂度为O(n^2),空间复杂度O(n)


import java.util.Stack;public class sort {public static Stack<Integer> sortStk(Stack<Integer> s) {Stack<Integer> r = new Stack<Integer>();while( !s.isEmpty() ) {int temp = s.pop();while ( !r.isEmpty() && r.peek() > temp) {s.push(r.pop());}r.push(temp);}return r;}
}

编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构(如数组)。相关推荐

  1. Java黑皮书课后题第3章:3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面。随即产生一个整数0或1,分别表示

    3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面 题目 题目概述 破题 代码 题目 题目概述 3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面 随即 ...

  2. 某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3

    某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门课程的成绩,编写程序,计算每名学生的平均成绩及名次.(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门 ...

  3. 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

    水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身.例如:153=13+53+33. 本题要求编写程序,计算所有N位水仙花数. 输入格式: 输入在一行中给出一个正整数N(3 ...

  4. vc 写c语言程序步骤,VC++ 6.0编写程序的详细步骤

    想知道VC++ 6.0工具如何编写程序吗,可能有些朋友还不熟悉,我们一起去了解一下VC++ 6.0编写程序的详细步骤吧. VC++ 6.0编写程序的详细步骤 vc++6.0的菜单简洁,工具明了,这里以 ...

  5. Java黑皮书课后题第3章:*3.8(对三个整数排序)编写程序,提示用户输入三个整数,以非降序的形式显示这三个整数

    *3.8(对三个整数排序)编写程序,提示用户输入三个整数,以非降序的形式显示这三个整数 题目 题目概述 破题 代码 如何理解值的互换 题目 题目概述 *3.8(对三个整数排序)编写程序,提示用户输入三 ...

  6. c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器

    c#给定二维数组按升序排序 Problem: Write a program in 8086 microprocessor to sort numbers in ascending order in ...

  7. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...

    [填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...

  8. 【Java】用sort实现对数组的升序和降序排序

    Java 用 sort 实现对数组的升序和降序排序 一.ArrayList 的升序与降序 二.数组升序 三.数组降序 方法一 方法二 一.ArrayList 的升序与降序 升序:Collections ...

  9. 实验七:掌握基本的MapReduce编程方法 (JAVA+Python实现)(编程实现文件合并和去重操作,编写程序实现对输入文件的排序,对给定的表格进行信息挖掘)

    一.实验目的: 1. 理解MapReduce的工作机制: 2. 掌握基本的MapReduce编程方法 3. 重点理解map过程,shuffle过程和reduce过程 二.实验环境: Hadoop+Ec ...

最新文章

  1. 太慢不能忍!CPU又拿硬盘和网卡开刀了!
  2. HDU1402 A * B Problem Plus(FFT)
  3. Automake十分钟速成教程
  4. 修改 IIS 队列长度
  5. C++ 类和对象(三):构造函数补充、匿名对象、友元、内部类、类的static与const
  6. Java中CAS详解
  7. LeetCode 206. 反转链表
  8. mysql导入dat文件_MySql导入和抽取大数量级文件数据
  9. 威纶通定时循环操作宏_威纶通触摸屏宏指令的使用
  10. Silverlight 2初尝及我的例子:Fanfou.com客户端——EatSilverlight
  11. badboy无法录制 浏览器版本过低请下载最新的Badboy
  12. Python入门基础-七、案例4 52周存钱挑战 #列表(list)#math 库#for循环#range()用法#函数的参数传递#datetime库
  13. android 自定义字体 ttf,Android利用TTF文件设置字体
  14. 【K8S etcd篇】部署etcd 3.4.14 集群
  15. Win10下IE无法打开网页的解决办法
  16. OROCOS之KDL(1)—— Linux环境搭建篇
  17. Excel合并单元格排序
  18. 全部40个博客网站排名
  19. SSD 4K对齐正确做法是这样!
  20. 【Android】基于BUILD.gn的源码构建

热门文章

  1. 【WinRAR】去除打开后弹出广告的方法
  2. 网页禁用F12或右键查看源代码
  3. 【无线通信基础与研究】
  4. iTunes for Windows 64bit 下载
  5. AECC 2015绿色版下载|adobe after effects cc 2015绿色版下载 v1
  6. 西门子S7-300PLC ModbusTCP通讯方法
  7. Arduino烧录bootloader,并作为ISP进行下载程序
  8. 利用MATLAB进行求导
  9. [power bi]calculate
  10. python 营销应用_随机森林算法入门(python),,它可以用于市场营销对客户