題目:A[0..N]有序增,B[0..M]有序增,C[0...N+M],
要求: 將A,B合併成C(c有序增)
算法:
/*************************************************
*
* 算法名稱:數組合並算法
*
* 作 者:李吉忠
*
* 核心算法:MergeArray(int []arraya,int []arrayb,ref int []arrayc)
*
* 完成時間:2013-2-4
*/
class ArrayMerge
{
static void MergeArray(int[] arraya, int[] arrayb, ref int[] arrayc)
{
int length_a = arraya.Length;
int length_b = arrayb.Length;
int i = 0, j = 0;
int k = 0;
while (i < length_a && j < length_b)
{
if (arraya[i] < arrayb[j])
{
arrayc[k++] = arraya[i++];
}
else
{
arrayc[k++] = arrayb[j++];
}
}
if (i < length_a)
{
while (i < length_a)
{
arrayc[k++] = arraya[i++];
}
}
if (j < length_b)
{
while (j < length_b)
{
arrayc[k++] = arrayb[j++];
}
}
}
static void Display(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i]);
}
}
static void Main(string[] args)
{
int[] a = new int[] { 4, 6, 7 };
int[] b = new int[] { 2, 5, 7, 8 };
int[] c = new int[7];
MergeArray(a, b, ref c);
Display(c);
Console.Read();
}
*
* 算法名稱:數組合並算法
*
* 作 者:李吉忠
*
* 核心算法:MergeArray(int []arraya,int []arrayb,ref int []arrayc)
*
* 完成時間:2013-2-4
*/
class ArrayMerge
{
static void MergeArray(int[] arraya, int[] arrayb, ref int[] arrayc)
{
int length_a = arraya.Length;
int length_b = arrayb.Length;
int i = 0, j = 0;
int k = 0;
while (i < length_a && j < length_b)
{
if (arraya[i] < arrayb[j])
{
arrayc[k++] = arraya[i++];
}
else
{
arrayc[k++] = arrayb[j++];
}
}
if (i < length_a)
{
while (i < length_a)
{
arrayc[k++] = arraya[i++];
}
}
if (j < length_b)
{
while (j < length_b)
{
arrayc[k++] = arrayb[j++];
}
}
}
static void Display(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i]);
}
}
static void Main(string[] args)
{
int[] a = new int[] { 4, 6, 7 };
int[] b = new int[] { 2, 5, 7, 8 };
int[] c = new int[7];
MergeArray(a, b, ref c);
Display(c);
Console.Read();
}
運行結果: