题目练习
合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 ,另有两个整数m和n,分别表示nums1和 nums2 中的元素数目。
请你 合并 nums2到nums1中,使合并后的数组同样按非递减顺序排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1中。为了应对这种情况,nums1的初始长度为m+n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。
c
#include <stdio.h>
#define MAX_SIZE 100
//合并两个有序数组的函数
void mergeArrays(int arr1[], int n1, int arr2[], int n2, int result[])
{
int i = 0, j = 0, k = 0;
//循环比较两个数组的元素,将较小的元素放入接果函数中
while (i < n1 && j < n2)
{
if (arr1[i] < arr2[j])
{
result[k] = arr1[i];
i++;
}
else
{
result[k] = arr2[j];
j++;
}
k++;
}
//将剩余元素放入接果数组中
while (i < n1)
{
result[k] = arr1[i];
i++;
k++;
}
while (j < n2)
{
result[k] = arr2[j];
j++;
k++;
}
}
int main()
{
int arr1[MAX_SIZE] = {1, 3, 5, 7, 9};
int n1 = 5;
int arr2[MAX_SIZE] = {2, 4, 6, 8, 10};
int n2 = 5;
int result[MAX_SIZE];
//调用mergeArrays函数,合并两个有序数组
mergeArrays(arr1, n1, arr2, n2, result);
int totalSize = n1 + n2;
//大印和并后的数组
printf("Merged array: ");
for (int i = 0; i < totalSize; i++)
{
printf("%d ", result[i]);
}
return 0;
}