已知两个已经按从小到大排列的数组,将它们中的所有数字组合成一个新的数组,要求新数组也是按照从小到大的顺序。请按照上述描述完成函数:int merge(int *array1, int len1, int *array2, int len2, int *array3);
/** 拼接有序数组array1、array2,并重新排序
*思路:分别从数组array1、array2取数据,取较小值,取完后移动所取数组的索引
*/
int merge(int *array1,int len1, int *array2, int len2, int *array3)
{
int i1 = 0,i2 = 0,i3 = 0;
int len3 = len1+len2;
int min;
while(i3 < len3)
{
/**i1不越界下,取array1,array2较小值*/
/**i2越界了,说明array2已经取完 */
if((array1[i1] <= array2[i2] && i1 < len1) || i2 >= len2)
{
min = array1[i1];
i1++;
}
/**i2不越界下,取array1,array2较小值*/
/**i1越界了,说明array1已经取完 */
else if((array1[i1] > array2[i2] && i2 < len2) || i1 >= len1)
{
min = array2[i2];
i2++;
}
*array3= min;
i3++;
array3++;
}
return len3;
}
void test8(void)
{
int *c;
int a[7] = {1,2,3,4,13,19,30};
int b[5] = {0,4,8,16,17};
int len1, len2, len_c;
int i=0;
len1 = sizeof(a)/sizeof(int);
len2 = sizeof(b)/sizeof(int);
len_c = len1+len2;
printf("len1:%d,len2:%d,len_c:%d\n", len1, len2, len_c);
c = malloc(len_c);
memset(c, 0, len_c*sizeof(int));
merge(a, len1, b, len2, c);
while(i<len_c)
{
printf("%d ", *c);
c++;
i++;
}
}