学习数据结构和算法的第12天

题目练习

合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1nums2 ,另有两个整数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;
}
相关推荐
豆沙沙包?1 分钟前
2025年- H83-Lc191--139.单词拆分(动态规划)--Java版
java·算法·动态规划
潘小安4 分钟前
『算法』图解数组排序全家桶 - 堆排序
算法·react.js·面试
星沁城1 小时前
172. 阶乘后的零
java·算法·leetcode
知青春之宝贵1 小时前
BEV感知-课程学习详细记录(自动驾驶之心课程)
学习
HeartException1 小时前
Spring Boot + MyBatis Plus + SpringAI + Vue 毕设项目开发全解析(源码)
人工智能·spring boot·学习
玉~你还好吗2 小时前
【LeetCode#第198题】打家劫舍(一维dp)
算法·leetcode
G等你下课2 小时前
摆动序列
算法
地平线开发者2 小时前
地平线高效 backbone: HENet - V1.0
算法·自动驾驶
Postkarte不想说话2 小时前
二叉平衡搜索树(AVL树)
算法