合并两个有序数组(给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。)

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    
    //定义,让数组从后往前遍历
    int i = m-1;
    int j = n-1;
    int len = m+n-1;

    //如果nums2为空的话,直接返回nums1
    if(n == 0)
        return ;
    //如果nums1为空的话,需要将nums2中的所有元素搬移到nums1中
    if(m == 0)
    {
        nums1[len--] = nums2[j--];
    }

    //开始循环
    while(i>=0 && j>=0)
    {
        if(nums1[i] < nums2[j])
        {
            //这里最好进行交换,因为交换的基本都是0,
            //如果是赋值的话,很可能会造成nums2中的元素永远小于nums中的,无法进行赋值

            nums1[len] ^= nums2[j];
            nums2[j] ^= nums1[len];
            nums1[len] ^= nums2[j];

            //继续循环
            len--;
            j--;
        }
        else
        {
            //理由同上
            nums1[len] ^= nums1[i];
            nums1[i] ^= nums1[len];
            nums1[len] ^= nums1[i];

            len--;
            i--;
        }

    }

    //处理nums1中的元素交换完成,nums2中的元素还有交换未完成的情况
    while(j >= 0)
    {
        nums1[len] ^= nums2[j];
        nums2[j] ^= nums1[len];
        nums1[len] ^= nums2[j];

        len--;
        j--;
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值