当前位置: 首页 > 知识库问答 >
问题:

堆栈排序算法

柴宏阔
2023-03-14

给定一个堆栈,任务是对它进行排序,使堆栈的顶部具有最大的元素。

示例1:

输入:堆栈:3 2 1输出:3 2 1示例2:

输入:堆栈:11 2 32 3 41输出:41 32 11 3 2

您的任务:

预期时间复杂度:O(N*N)预期辅助空间:O(N)递归。

约束:1

共有3个答案

龚镜
2023-03-14

如果您能够将最小的元素移动到堆栈的底部,那么您就完成了(因为您可以重复执行此操作,每次都缩小堆栈)。

要将最小的元素移动到底部,请将所有元素移动到辅助堆栈中,但保持到目前为止最小的元素分开。当主堆栈为空时,按最小的元素,然后推送所有其他元素。

例如。

4 5 2 7| 

4 5 2| : 7
4 5|7  : 2
4|5 7  : 2
|4 5 7 : 2

2|4 5 7 
2 4|5 7
2 4 5|7
2 4 5 7|
凤经武
2023-03-14

堆栈已预填充,您可以尝试将堆栈的每个元素弹出到数组中(O(n)辅助空间)。根据您喜欢的排序算法对数组进行排序(有些算法可以在O(nLog(n))中工作)

堆栈为空,请改用优先级队列:|

龙毅
2023-03-14

似乎禁止使用任何数据结构,除了训练中的堆栈。

您可以使用第二个堆栈对堆栈进行排序。

例如,在每个阶段选择最小元素。

弹出顶部元素并将其放入smin变量中。

弹出所有其他元素。如果当前值小于< code>smin,则将< code>smin压入第二个堆栈,并放入新值。

毕竟,将< code>smin推入空的主堆栈,然后将第二个堆栈中的所有元素移到主堆栈中。

重复但要执行 n-1 个步骤(如果您的堆栈没有 Count 属性,则在移动元素时可以记住计数)。重复此步骤,直到对所有元素进行排序(未排序的剩余大小变为 1)

 类似资料:
  • 哪种排序算法适合对堆栈进行排序以提高空间效率?我需要对堆栈进行“就地”排序。此外,我对“就地”算法的理解是它们不使用任何其他数据结构 - 这是正确的吗? 我知道这与这个问题相似,但我想知道堆栈是否会有所不同?我知道堆栈可以只是一种链接列表,但是你只能访问顶部的事实会改变你的做法吗?

  • 在这个程序中,我必须打开一个文件并将其打印到文本区域,然后确保所有括号、括号等匹配。如果括号匹配,我将在另一个文本区域中打印出来。我的问题如下:我是从文件中读取还是从第一个文本区域读取?我是在Actionlistener还是在构造函数中创建堆栈?

  • 本文向大家介绍C#排序算法之堆排序,包括了C#排序算法之堆排序的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现堆排序的具体代码,供大家参考,具体内容如下 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 示例数据 # heapq_heapdata.py # This data was generated with the random module. data = [19, 9, 4, 10, 11] # heapq_showtree.py import math from io import StringIO def show_tree(tree, total_width=36, fil

  • 以下是完整的问题: 编写一个java方法,它将接受两个排序后的堆栈a和B(最小值在顶部),并返回一个排序后的堆栈D(最小值在顶部)。只允许使用堆栈操作,如pop、push、isEmpty和peek。 示例:假设A={(top)1,4,7,9}和B={(top)2,3,6},那么函数将返回一个新的堆栈D={(top)1,2,3,4,6,7,9} 我写的代码是这样的: 你怎么认为?

  • 我有一个执行快速排序的应用程序。在我开始给它一些更大的数字(我第一次得到它是10000000)之前,它工作得很好。我知道是由递归引起的,但我不明白为什么我的应用程序会因此而崩溃。如有任何建议,将不胜感激。这是我的密码: