2010-05-27 101 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>,它將隨着它的增長分配越來越大的陣列,並且最終的容量將大於所需的數量。

相關問題