对堆栈进行排序的算法
Algorithm to sort stack in place
为了 space 效率,哪种排序算法可以很好地对堆栈进行排序?我需要对堆栈进行排序 'in place.' 另外,我对 'in place' 算法的理解是它们不使用任何额外的数据结构 - 这是否正确?
我知道这与 this question 类似,但我想知道堆栈是否会有所不同?我知道堆栈可以只是一种链表,但是您只能访问顶部这一事实会改变您的做法吗?
如果您打算仅使用堆栈操作对堆栈进行排序(您将必须有另一个堆栈),则必须省略 "in-place" 限定符。就地算法是一种不使用其他数据结构来转换其输入的算法。但是,intermediary/temporary 变量允许少量额外存储 space。
如果省略 "in-place" 限定符,您可以在此处找到答案:How to sort a stack using only stack operations?(使用额外的帮助程序堆栈对堆栈进行排序)
如果保留限定符,则只能在实现级别对堆栈进行排序,而不能使用堆栈操作。
就地排序还有一个替代定义,它只是意味着排序后的数据最终会返回到与未排序的数据最初存储的同一容器(在本例中为堆栈)中。
回到最初的问题,访问and/or更改堆栈最后一个元素的唯一方法是弹出所有其他元素,这需要 O(n-1) space 在其他地方,最简单的是数组。
如果堆栈实现为链表,则可以使用链表类型排序,但这将是面向列表的排序,使用标准堆栈操作 peek、pop 和 push 以外的操作。
为了 space 效率,哪种排序算法可以很好地对堆栈进行排序?我需要对堆栈进行排序 'in place.' 另外,我对 'in place' 算法的理解是它们不使用任何额外的数据结构 - 这是否正确?
我知道这与 this question 类似,但我想知道堆栈是否会有所不同?我知道堆栈可以只是一种链表,但是您只能访问顶部这一事实会改变您的做法吗?
如果您打算仅使用堆栈操作对堆栈进行排序(您将必须有另一个堆栈),则必须省略 "in-place" 限定符。就地算法是一种不使用其他数据结构来转换其输入的算法。但是,intermediary/temporary 变量允许少量额外存储 space。
如果省略 "in-place" 限定符,您可以在此处找到答案:How to sort a stack using only stack operations?(使用额外的帮助程序堆栈对堆栈进行排序)
如果保留限定符,则只能在实现级别对堆栈进行排序,而不能使用堆栈操作。
就地排序还有一个替代定义,它只是意味着排序后的数据最终会返回到与未排序的数据最初存储的同一容器(在本例中为堆栈)中。
回到最初的问题,访问and/or更改堆栈最后一个元素的唯一方法是弹出所有其他元素,这需要 O(n-1) space 在其他地方,最简单的是数组。
如果堆栈实现为链表,则可以使用链表类型排序,但这将是面向列表的排序,使用标准堆栈操作 peek、pop 和 push 以外的操作。