Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何对2个未排序的列表进行排序并创建一个已排序的列表?_Algorithm_Data Structures_Queue - Fatal编程技术网

Algorithm 如何对2个未排序的列表进行排序并创建一个已排序的列表?

Algorithm 如何对2个未排序的列表进行排序并创建一个已排序的列表?,algorithm,data-structures,queue,Algorithm,Data Structures,Queue,我得到了两个未排序的ArrayList,它们只有一个排序列表。不允许我对前两个列表进行排序 我只是将这两个列表都转储到优先级队列中,然后取出值并将其放入第三个列表中。像 public static void sortList() { ArrayList<Integer> l1 = new ArrayList<>(); l1.add(10); l1.add(11); l1.add(8); l1.

我得到了两个未排序的ArrayList,它们只有一个排序列表。不允许我对前两个列表进行排序

我只是将这两个列表都转储到优先级队列中,然后取出值并将其放入第三个列表中。像

public static void sortList() {
        ArrayList<Integer> l1 = new ArrayList<>();
        l1.add(10);
        l1.add(11);
        l1.add(8);
        l1.add(15);
        l1.add(2);

        ArrayList<Integer> l2 = new ArrayList<>();
        l2.add(11);
        l2.add(2);
        l2.add(15);
        l2.add(18);

        PriorityQueue<Integer> queue = new PriorityQueue<>();
        for (int i = 0; i < l1.size(); i++) {
            queue.add(l1.get(i));
        }

        for (int i = 0; i < l2.size(); i++) {
            queue.add(l2.get(i));
        }

        ArrayList<Integer> list3 = new ArrayList<>();

        while (!queue.isEmpty()) {
            System.out.println(queue.peek());
            list3.add(queue.poll());
        }

    }
publicstaticvoidsortlist(){
ArrayList l1=新的ArrayList();
l1.加入(10);
l1.加入(11);
l1.加入(8);
l1.加入(15);
l1.加入(2);
ArrayList l2=新的ArrayList();
l2.添加(11);
l2.添加(2);
l2.添加(15);
l2.添加(18);
PriorityQueue=新建PriorityQueue();
对于(int i=0;i

有没有另一种方法可以解决这个问题,时间复杂度或空间复杂度更好?

不需要使用额外的优先级队列

这个问题可以用两种方法解决:

方法1:

首先连接两个列表,然后排序

考虑到,
列表1的大小=n
列表2的大小=m

时间复杂度:
O((n+m)log(n+m))

辅助空间复杂性:
O(n+m)

方法2:

首先对两个列表进行排序,然后合并

时间复杂度:
O(nlog(n)+mlog(m)+(n+m))

辅助空间复杂性:
O(n+m)


结论:从上述时间复杂度来看,方法2明显优于方法1,两种方法的空间复杂度保持不变。

将两个列表添加到
list3
,然后对
list3
进行排序。因此,时间复杂度相同,但没有额外的空间?是的,没有额外的空间。从技术上讲,时间复杂度是相同的,但常数因子(以及运行时间)应该更低。@am1212,我的回答解决了你的问题吗?我想问题清楚地说,在合并之前不要对两个列表进行排序。。