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

就地排序堆栈的算法

缪坚诚
2023-03-14

哪种排序算法适合对堆栈进行排序以提高空间效率?我需要对堆栈进行“就地”排序。此外,我对“就地”算法的理解是它们不使用任何其他数据结构 - 这是正确的吗?

我知道这与这个问题相似,但我想知道堆栈是否会有所不同?我知道堆栈可以只是一种链接列表,但是你只能访问顶部的事实会改变你的做法吗?

共有2个答案

郑承恩
2023-03-14

就地排序有一个替代定义,它只意味着已排序的数据最终会返回到未排序数据最初存储的同一容器(在本例中为堆栈)中。

回到最初的问题,访问和/或更改堆栈的最后一个元素的唯一方法是弹出所有其他元素,这需要其他地方的O(n-1)空间,最简单的是数组。

如果堆栈实现为链表,则可以使用链表类型排序,但这将是面向列表的排序,使用标准堆栈操作以外的操作进行扫视、弹出和推送。

蓬新
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

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

  • 以下是完整的问题: 编写一个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} 我写的代码是这样的: 你怎么认为?

  • 本文向大家介绍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

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