基本思路
1.开启块空间出来,用于临时存放数据
2.从下标0处开始比较俩个数组的元素,如果nums1当前下标元素比nums2当前下标元素小,就把nums1的当前下标元素放到开辟的空间中去并且num1的当前下标加1和指向开辟出来的临时空间下标加1,反之也是如此。
3.最后可能要进行末尾处理,可能 nums1的元素没处理完,nums2的元素已经处理好了,此时元素没处理完的数组直接拷贝到临时空间的末尾就好了
动图如下
代码如下
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int * ret = (int *)malloc(sizeof(int) * (n + m));
int num1_targ = 0;
int num2_targ = 0;
int ret_targ = 0;
while(num1_targ < m && num2_targ < n)
{
if(nums1[num1_targ] <= nums2[num2_targ])
{
ret[ret_targ++] = nums1[num1_targ];
num1_targ++;
}
else
{
ret[ret_targ++] = nums2[num2_targ];
num2_targ++;
}
}
//末尾处理
if(num1_targ >= m)
{
while(num2_targ < n)
{
ret[ret_targ++] = nums2[num2_targ];
num2_targ++;
}
}
else if(num2_targ >= n)
{
while(num1_targ < m)
{
ret[ret_targ++] = nums1[num1_targ];
num1_targ++;
}
}
memcpy(nums1,ret,sizeof(int) * (m + n));
}