2010-05-27 103 views
0

假设我们有三个阵列合并三个文件分割成一个大文件

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个数组,然后2个合并将合并3个数组到1;
  • 但一口气合并3个数组并不困难;
  • 如果你的数组太大而不能存储在内存中,你将不得不使用外部排序算法和合并算法,谷歌周围,你会发现大量的材料;
  • 你当然可以合并而不排序,但结果将不会被排序。

如有必要,编辑您的问题,我会尽力做到更有帮助。

0

你的意思是把它们都按照升序排列在一个数组中?

您可以将它们全部复制,然后使用bubblesort或insertsort。

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

2

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

  1. 4,3,1中的最低者为1.将1添加到d,从c中删除。
  2. 4,3,2的最小值是2.将2添加到d,从c中删除。
  3. 4,3,15的最低点是3.将3添加到d,从b移除。
  4. 4,5,15的最低点是4.将4添加到d,从中删除。
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); 
     } 
    } 
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>,它将随着它的增长分配越来越大的阵列,并且最终的容量将大于所需的数量。

相关问题