【问题标题】:Merge sort: Why does my merge method only add one number to the queue?合并排序:为什么我的合并方法只向队列中添加一个数字?
【发布时间】:2017-06-20 16:36:04
【问题描述】:

这是我的代码:

void mergeHelper(Queue<T> input1, Queue<T> input2, Queue<T> output) {
            // TODO 4
            if(!input1.isEmpty())
            {
                T ip1 = input1.dequeue();
                if(!input2.isEmpty())
                {
                    T ip2 = input2.dequeue();
                    if(ip1.compareTo(ip2)<=0)
                        output.enqueue(ip1);
                    else
                        output.enqueue(ip2);
                }
                else
                {
                    output.enqueue(ip1);
                }
                mergeHelper(input1, input2, output);
            }
            else if(!input2.isEmpty())
            {
                T ip2 = input2.dequeue();
                if(!input1.isEmpty())
                {
                    T ip1 = input1.dequeue();
                    if(ip1.compareTo(ip2)<=0)
                        output.enqueue(ip1);
                    else
                        output.enqueue(ip2);
                }
                else
                {
                    output.enqueue(ip2);
                }
                mergeHelper(input1, input2, output);
            }

    }

这是一个临时驱动:

public class MergeDriver {

    public static void main(String[] args) {

        MergeSorter<Integer> ms = new MergeSorter<>();
        Queue<Integer> one = new Queue<>();
        Queue<Integer> two = new Queue<>();
        one.enqueue(new Integer(2));
        two.enqueue(new Integer(1));
        Queue<Integer> res = ms.merge(one, two);
        System.out.println("The size of res is: "+ res.size());
        System.out.println("The value stored is: ");
        while(!res.isEmpty())
            System.out.println((int)res.dequeue());
    }

}

只有 1 个被添加到输出队列中,其余的则不被添加。

生成的队列大小始终为 1,并且只有最小的元素被添加到队列中。我究竟做错了什么?

【问题讨论】:

  • 使用Queue有什么特殊目的吗?您可以使用简单的数组执行归并排序。

标签: java recursion linked-list queue mergesort


【解决方案1】:

您的算法不正确,因为它将两个项目都出列以进行比较,但只将其中一个添加回输出。

您可以通过在出列之前使用peek() 方法来解决此问题,比较结果,然后才将两个元素中较小的一个出列,并将其移动到输出中。

【讨论】:

  • 修复了它。谢谢! :)
猜你喜欢
  • 2021-12-09
  • 1970-01-01
  • 2022-07-21
  • 2019-04-20
  • 1970-01-01
  • 2021-06-19
  • 2015-06-25
  • 1970-01-01
  • 2017-05-30
相关资源
最近更新 更多