题目练习
合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1和 nums2,另有两个整数m和n,分别表示nums1和 nums2 中的元素数目。
请你 合并 nums2到nums1中,使合并后的数组同样按非递减顺序排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1中。为了应对这种情况,nums1的初始长度为m+n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。
#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;
}