在3堆Integers之间进行堆栈排序

时间:2014-02-09 21:35:50

标签: java sorting stack

我错过了什么来完成这个问题?

家庭作业问题说:

假设您有3个整数堆栈,s1(其中包含值),s2(为空)和s3(也为空)。使用此处给出的算法编写代码以对s1中的条目进行排序(排序的值将在结尾处的s2中): 在任何时间点,s2将按排序顺序保留条目,最小值位于顶部。将s1的顶部条目移动到s2。删除并考虑s1的顶部条目t。删除堆栈s2的条目并将它们放到堆栈s3上,直到到达正确的位置以放置t。然后把t放到s2上。接下来将所有条目从s3移动到s2。

到目前为止我的代码:

public class practice2
{
public static void main(String[] args)
{
    Stack<Integer> s1 = new Stack<Integer>();
    Stack<Integer> s2 = new Stack<Integer>();
    Stack<Integer> s3 = new Stack<Integer>();

    s1.push(1);
    s1.push(61);
    s1.push(21);
    s1.push(31);
    s1.push(51);
    s1.push(111);

    s2.push(s1.pop());

    while(!s1.isEmpty())
    {
        if(s1.peek() < s2.peek())
        {
            s2.push(s1.pop());
        }
        else
        {
            s3.push(s1.pop());
        }
    }

    if(s2.peek() < s3.peek())
    {
        while(!s2.isEmpty())
        {
            s1.push(s2.pop());
        }
    }

    while(!s1.isEmpty())
    {
        if(s1.peek() > s3.peek())
        {
            s2.push(s1.pop());
        }
        else
        s2.push(s3.pop());
    }

  }
 }

1 个答案:

答案 0 :(得分:0)

您的代码不符合您提供的算法。您要实现的算法是

  1. 删除并考虑 s1 的最高条目 t
  2. 删除堆栈 s2 的条目并将它们放入堆栈 s3 ,直到您到达正确位置 t
  3. 然后将 t 添加到 s2
  4. 接下来将所有条目从 s3 移至 s2

  5. 所以编写伪代码来执行此操作:

    1. 获取/查看 s1 - t
    2. 虽然 t 大于 s2 的顶部,但将 s2 的顶部推到 s3
    3. s2
    4. 上按 t
    5. s3 不为空时将 s3 的顶部推到 s2
    6. 重复所有 s1

    7. 目前,您的代码执行以下操作:

      1. 虽然 s1 不为空:如果 s1 的顶部小于 s2的顶部

        • 然后将顶部推到 s2
        • 否则请按 s3
      2. 如果 s2 的顶部小于 s3的顶部

        • 将所有 s2 推送到 s1
      3. 虽然 s1 不为空:如果 s1 的顶部大于 s3的顶部

        • 然后将 s1 的顶部推到 s2
        • 否则将 s3 的顶部推到 s2
      4. 希望这有帮助。