合并排序列表

时间:2014-10-07 23:01:01

标签: algorithm merge divide-and-conquer

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

合并前两个列表;然后将结果列表与第三个列表合并;然后将结果列表与第四个列表等合并,后者取O(j * jn)。

3 个答案:

答案 0 :(得分:0)

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

while(n!=1)
    for i=0 to n/2
        merge list(i) with list list(n)
    n = n/2

这样你将整个组合成成对,然后成对配对等等

答案 1 :(得分:0)

不确定为什么你需要分而治之才能实现这一目标。您可以创建一个无序的大列表然后使用内置排序来排序大型列表,这将是O(jn * Log(jn))

    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();
    }

答案 2 :(得分:0)

这与标准合并排序没有什么不同。考虑一个包含未分类项目的大小jn的列表。在大小log(n)项列表的jn次合并排序后,您将在每个列表中包含j个排序列表,其中包含n个项目。所以继续使用合并排序来解决您的问题。

请查看合并排序,这是一种分而治之的算法,并了解它。然后你就可以轻松解决这个问题了。