Algorithm 合并排序列表

Algorithm 合并排序列表,algorithm,merge,divide-and-conquer,Algorithm,Merge,Divide And Conquer,我正试图想出一个分而治之的算法来合并j个排序列表和n个元素,但我被卡住了;我不知道如何把这个问题分成更小的子问题。我希望合并算法更高效,如下所示: 合并前两个列表;然后将结果列表与第三个列表合并;然后将结果列表与第四个列表合并,以此类推,该列表取O(j*jn) u可以在O(j*log(j)n)时间内完成 这样你就可以把整个团队合并成一对一对,然后是一对一对,依此类推。你不知道为什么要分而治之才能做到这一点。您只需创建一个无序的大列表,然后使用内置排序对大列表进行排序,它将是O(jn*Log(jn

我正试图想出一个分而治之的算法来合并j个排序列表和n个元素,但我被卡住了;我不知道如何把这个问题分成更小的子问题。我希望合并算法更高效,如下所示:

合并前两个列表;然后将结果列表与第三个列表合并;然后将结果列表与第四个列表合并,以此类推,该列表取O(j*jn)

u可以在O(j*log(j)n)时间内完成


这样你就可以把整个团队合并成一对一对,然后是一对一对,依此类推。你不知道为什么要分而治之才能做到这一点。您只需创建一个无序的大列表,然后使用内置排序对大列表进行排序,它将是O(jn*Log(jn))

列表返回列表(列表列表)
{
List ret=新列表();

对于(int i=0;i 这与标准合并排序没有什么不同)。考虑一个大小列表<代码> jn>代码>未排序的项目。
合并排序的迭代在大小
jn
项列表上,您将拥有
j
排序列表,每个列表中都有
n
项。因此,只需继续使用合并排序即可解决您的问题

请查阅合并排序,这是一种分而治之的算法,并理解它。这样你就可以很容易地解决这个问题

while(n!=1)
    for i=0 to n/2
        merge list(i) with list list(n)
    n = n/2
    List<int> returnList(List<List<int>> lists)
    {
        List<int> ret = new List<int>();
        for(int i=0;i<lists.Length;i++)
        {
            for(int j=0;j<lists;j++)
            {
                ret.Add(lists[i][j]);               
            }
        }
        ret.Sort();
    }