如何仅使用一个额外队列对队列进行排序

时间:2015-03-03 02:13:28

标签: algorithm queue constants analysis

所以基本上,我要求排序队列,我只能使用一个帮助队列,并且只允许额外的内存量。

如何仅使用一个额外队列对队列进行排序?

1 个答案:

答案 0 :(得分:0)

就个人而言,我不喜欢像这样的任意限制来面试问题,除非它实际上反映了你必须在公司工作的条件。我不认为它实际上找到合格的候选人,或者更确切地说,我不认为它准确地消除了不合格的候选人。 当我为公司进行技术面试时,所有问题都是切合实际的。把它放在一边。

虽然肯定有几种方法可以解决这个问题,并且使用递归肯定是一种方法,但我希望如果你试图通过递归解决它,他们会要求你在没有递归的情况下完成它,考虑到他们正在限制你可以使用的内存和数据结构。否则,他们可能会给你两个队列,一个堆栈和你想要的内存。

以下是解决此问题的一种方法示例。最后,应该对queueB进行排序。它只使用一个额外的局部变量。这是在C#中完成的。

        queueB.Enqueue(queueA.Dequeue());
        while (queueA.Count > 0)
        {
            int next = queueA.Dequeue();
            for (int i = 0; i < queueB.Count; ++i)
            {
                if (queueB.Peek() < next)
                {
                    queueB.Enqueue(queueB.Dequeue());
                }
                else
                {
                    queueB.Enqueue(next);
                    next = queueB.Dequeue();
                }
            }
            queueB.Enqueue(next);
        }