题目描述:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入A1中,并且所有数字是排序的。
分析:因为两个数组都已经排序了,切A1的末尾有足够的空间,那我们就从末尾这个角度来解。从A1和A2的末尾开始比较,将更大的放在A1容量的末尾,然后向前扫描。因为是用c#写,所以我是重新声明了一个数组来存储A1和A2的值。
代码如下:
private static int[] CombineSortArray(int[] A1,int[] A2)
{
if (A1 == null || A2 == null)
return new int[] { 0 };
int a1Len = A1.Length;
int a2Len = A2.Length;
int newLen = a1Len + a2Len;
int[] result = new int[newLen];
for(int i=a1Len-1,j=a2Len-1;i>=0 || j>=0;)
{
//判断A1、A2是否取完
if(i<0)
{
result[newLen - 1] = A2[j];
j--;
newLen--;
continue;
}
if (j < 0)
{
result[newLen - 1] = A1[i];
i--;
newLen--;
continue;
}
if (A1[i]>A2[j])
{
result[newLen - 1] = A1[i];
i--;
}
else
{
result[newLen - 1] = A2[j];
j--;
}
newLen--;
}
return result;
}总结:写得不够优雅,判断太多了。
本文介绍了一种合并两个已排序数组的方法,通过从数组末尾开始比较并放置较大元素到目标数组末尾的方式,实现了两数组的有序合并。
1232

被折叠的 条评论
为什么被折叠?



