合并两个有序数组

思路1(代码如下):

        1、首先,定义一个中间数组temp去存储两数组比较后的结果

        2、依次遍历nums1和nums2,比较当前索引所指的值得大小,将小的放到temp数组中,直到有一个数组遍历完了

        3、此时有一个数组遍历完了,另一个还没遍历完的数组剩余元素的值都大于等于已遍历完数组的最后一个元素的值,将没遍历完的元素直接接在temp数组后面就行了

        4、将temp数组的各元素值,复制给nums1

思路2:

        可以直接把数组nums2接在nums1后面,再对nums1进行排序

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {

    int temp[m + n];//定义一个中间数组存放排序数组
    int i = 0, j = 0, k = 0;
    while (i < m && j < n) {
        if (nums1[i] <= nums2[j]) {
            temp[k++] = nums1[i++];
        } else {
            temp[k++] = nums2[j++];
        }
    }

    //将未遍历完的数组直接接到temp后面
    while (i < m) {
        temp[k++] = nums1[i++];
    }

    while (j < n) {
        temp[k++] = nums2[j++];
    }

    //将temp数组复制到nums1
    for(int i= 0;i < (m + n);i++)
        nums1[i] = temp[i]; 
}

在这里我开始使用的是malloc去动态分配temp数组,但是运行后消耗时间相比直接定义数组慢太多

另一个问题就是动态分配后将temp数组复制到nums1,直接用了temp = nums1,让temp为nums1的首地址,不知道为什么不行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值