合并两个有序数组
88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com)
思路和合并两个有序链表相同
//两个数组元素分别比较,把数组中小的放到新数组,再把新数组拷回去
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
// 申请个第三存储空间
int* arr = (int*)malloc(sizeof(int) * nums1Size);
if (arr == NULL)
{
printf("malloc fail\n");
return;
}
int i = 0;
int j = 0;
int k = 0;
// 这部分最重要
while (i < m && j < n)
{
if (nums1[i] > nums2[j])
arr[k++] = nums2[j++];
else
arr[k++] = nums1[i++];
}
//判断谁先结束
while (i < m) //nums1未拷贝完
{
arr[k++] = nums1[i++];
}
while (j < n) //nums2未拷贝完
{
arr[k++] = nums2[j++];
}
//将数据拷贝回去num1中
for (i = 0; i < nums1Size; i++)
nums1[i] = arr[i];
free(arr);
}