将三个文件合并为一个大文件

时间:2010-05-27 09:00:08

标签: c# algorithm

假设我们有三个数组

int a[]=new int[]{4,6,8,9,11,12};
int b[]=new int[]{3,5,7,13,14};
int c[]=new int[]{1,2,15,16,17};

我们希望将它合并到一个大d数组中,其中d.length = a.length + b.length + c.length
但是我们有内存问题这意味着我们必须只使用这个d数组我们应该合并这三个数组当然我们可以使用合并排序但是我们可以使用合并算法而不用排序方法吗?像两个排序的数组我们可以在一个排序的数组中合并三个或更多的数组吗?

5 个答案:

答案 0 :(得分:2)

合并排序与3个或更多阵列一样有效。要构建d,请在a,b和c的开头添加最低值。删除该元素,重复。

  1. 最低的4,3,1是1.将1添加到d,从c。
  2. 中删除
  3. 最低的4,3,2是2.将2添加到d,从c。
  4. 中删除
  5. 最低4,3,15为3.添加3到d,从b。
  6. 中删除
  7. 最低4,5,15为4.添加4到d,从a。
  8. 中删除

答案 1 :(得分:0)

你的意思是按升序将它们全部放在一个数组中?

您可以将它们全部复制,然后再冒泡或插入。

如果订购它们,则可以使用mergesort中使用的相同合并算法。您将需要每个数组的索引指针。在每个步骤中,在各自的索引中选择所有数组的最小值,将其插入目标表,并增加源数组的索引。

答案 2 :(得分:0)

你的问题有点不清楚,但这里有;

  • 如果你可以合并2个数组,那么2个合并会将3个数组合并为1个;
  • 但要一次合并3个阵列并不困难;
  • 如果您的阵列太大而无法存储在内存中,您将不得不使用外部排序算法和合并算法,谷歌周围,你会找到大量的材料;
  • 你当然可以合并而不进行排序,但结果不会被排序。

如有必要,请修改您的问题,我会尽力提供帮助。

答案 3 :(得分:0)

可能试试这个:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        int a[]=new int[]{4,6,8,9,11,12};
        int b[]=new int[]{3,5,7,13,14};
        int c[]=new int[]{1,2,15,16,17};


        foreach (int element in a)
        {
            Console.WriteLine(element);
        }
        foreach (int element in b)
        {
            Console.WriteLine(element);
        }
        foreach (int element in c)
        {
            Console.WriteLine(element);
        }

        var list = new List<int>();
        list.AddRange(a);
        list.AddRange(b);
        list.AddRange(c);

        int[] d = list.ToArray();

        foreach (int element in d)
        {
            Console.WriteLine(element);
        }
    }

答案 4 :(得分:0)

如果您只想连接数组,可以创建目标数组并将数据复制到其中:

int[] d = new int[a.Length + b.Length + c.Length];
a.CopyTo(d, 0);
b.CopyTo(d, a.Length);
c.CopyTo(d, a.Length + b.Length);

这将有最小的开销,因为只分配了所需的大小。例如,如果您将项目添加到List<int>,它将随着它的增长分配越来越大的数组,并且最终容量将大于所需数量。