将2个堆栈的所有值添加到1个堆栈并对其进行排序

时间:2013-05-14 15:15:56

标签: algorithm sorting stack

有3个堆栈 - A,B,C

堆栈A和B已排序(堆栈顶部的数字最大)。 堆栈C为空 只允许5次操作:

push
pop 
top 
is_empty
create

我们需要编写一个接收堆栈A和B的函数,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。

3 个答案:

答案 0 :(得分:2)

对于第一次剪切,将问题分成两部分:

  • 将元素从A和B移动到C,最小元素位于顶部。
  • 将顶部最少元素的C转换为C,顶部最高元素,即反转排序顺序。

一旦你有了这个,就可以看出是否有更好/更有效的算法。

答案 1 :(得分:1)

查找towers of hanoi,标准问题/难题。

答案 2 :(得分:0)

在对堆栈进行排序时,您可以应用合并排序机制。我的想法与user1930928类似。但是为了更清晰和扩展数据反转,添加这个。

算法如下

  1. 将A的顶部与B的顶部进行比较

  2. 弹出最少元素并推送到堆栈C

  3. 重复步骤2,直到任何堆栈(A或B)变空

  4. 将剩余的元素从非空堆栈移动到C. 现在你有C中的所有元素,但是按升序排列。 (这是最重要的元素)。

  5. 将所有元素从C移动到A.(A中的内容按降序排列)

  6. 将所有元素从A移动到B.(B中的内容按升序排列)

  7. 将所有元素从B移动到C.

  8. 现在C的内容按降序排序,这是期望的结果。

    我鼓励你尝试编写程序。如果你真的想要,我可以写。