用于对堆栈进行排序的算法

时间:2016-07-16 18:23:32

标签: java algorithm sorting stack in-place

哪种排序算法可以很好地对Stack进行排序以提高空间效率?我需要在适当的位置对堆栈进行排序。我对“就地”算法的理解是他们不使用任何其他数据结构 - 这是正确的吗?

我知道这与this question类似,但我想知道堆栈是否会有所不同?我知道堆栈可以只是一种链表,但事实上你只能访问最重要的改变你怎么做?

2 个答案:

答案 0 :(得分:0)

如果您的目的是仅使用堆栈操作对堆栈进行排序(您将不得不拥有另一个堆栈),则必须省略“就地”限定符。就地算法是一种不使用其他数据结构来转换其输入的算法。但是,中间/临时变量允许少量额外存储空间。

如果省略“就地”限定符,可以在此处找到答案:How to sort a stack using only stack operations?(使用额外的帮助堆栈对堆栈进行排序)

如果保留限定符,则只能在实现级别上对堆栈进行排序,而不是使用堆栈操作。

答案 1 :(得分:0)

对于就地排序有一个备用定义,这意味着已排序的数据最终会在最初存储未排序数据的同一容器(在本例中为堆栈)中结束。

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

如果堆栈是作为链表实现的,那么可以使用链表类型排序,但这将是面向列表的排序,使用标准堆栈操作peek,pop和push之外的操作。