假设我们有三个数组
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数组我们应该合并这三个数组当然我们可以使用合并排序但是我们可以使用合并算法而不用排序方法吗?像两个排序的数组我们可以在一个排序的数组中合并三个或更多的数组吗?
答案 0 :(得分:2)
合并排序与3个或更多阵列一样有效。要构建d,请在a,b和c的开头添加最低值。删除该元素,重复。
答案 1 :(得分:0)
你的意思是按升序将它们全部放在一个数组中?
您可以将它们全部复制,然后再冒泡或插入。
如果订购它们,则可以使用mergesort中使用的相同合并算法。您将需要每个数组的索引指针。在每个步骤中,在各自的索引中选择所有数组的最小值,将其插入目标表,并增加源数组的索引。
答案 2 :(得分:0)
你的问题有点不清楚,但这里有;
如有必要,请修改您的问题,我会尽力提供帮助。
答案 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>
,它将随着它的增长分配越来越大的数组,并且最终容量将大于所需数量。