数据结构代码day02

题目:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。

(1)算法思想:

## 利用双指针技术,同时遍历两个数组A,B,通过比较A,B两个数组当前指针所指向的元素大小,将较小的元素复制到结果数组C中,并移动对应的指针。
这个过程一直持续到至少有一个数组的所有元素都被复制到结果数组中。之后,将剩余数组中的元素直接复制到结果数组的末尾。

(2)算法步骤:
①数组长度比较:首先保证A的数组长度 + B的数组长度 > C的数组长度
②初始化指针:设置两个指针i,j分别指向A,B两个数组的起始位置,同时设置一个指针k指向结果数组C的起始位置。
③比较元素:比较A[i]和B[j]的值,将较小的元素复制到C[k++],并将对应的指针向前移动一位。
④遍历结束:当其中一个数组的所有元素都被复制到结果数组后,另一个数组可能还有剩余元素。
⑤复制剩余元素:如果A还有剩余元素,将它们直接复制到C的剩余位置;如果B还有剩余元素,同样操作。
⑥返回结果长度:完成上述步骤后,返回指针k的值,表示结果数组的有效长度。
在这里插入图片描述

bool mergeSortedArrays(seqList A, seqList B, seqList &C){
    if(A.length + B.length > C.maxLength) {  // 首先保证A的长度 + B的长度 > C的长度
        return false;
    }
    int i = 0, j = 0, k = 0;
    while (i < A.length && j < B.length) {
        if (A.data[i] < B.data[j]) {
            C.data[k++] = A.data[i];
        } else {
            C.data[k] = B.data[j];
        }
    }
    while (i < A.length) {  // 若A中有剩余元素
        C.data[k++] = A.data[i++];
    }

    while(j < B.length) {  // 若B中有剩余元素
        C.data[k++] = B.data[j++];
    }

    C.length = k;
    return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值