写一个函数,合并两个有序数组

  1. 思路
    当一个数组的空间足够大时可以将两个有序数组从后向前排序以提升效率。

2.代码

#include <iostream>

#define N 100                //数组的最大长度

using namespace std;

int main(int argc, const char * argv[]) {
    
    //假设两个数组中有一个数组的空间足够大到容纳两个数组,因此可以将两个数组合并到这个空间足够大的数组中,这里选择a1
    int a1[N] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
    int a2[N] = {2, 4, 6, 8, 10, 12, 14, 16, 18};
    int len1 = 10;
    int len2 = 9;
    
    //从后向前比较,初始化两个数组当前比较位置的下表和当前插入位置的下标
    int cur1 = len1 - 1;
    int cur2 = len2 - 1;
    int cur3 = len1 + len2 - 1;
    
    //当两个数组都同时还有元素未必较完时
    while(cur1 >= 0 && cur2 >= 0) {
        if(a1[cur1] > a2[cur2]) {
            a1[cur3] = a1[cur1];
            cur1--;
        }
        else {
            a1[cur3] = a2[cur2];
            cur2--;
        }
        cur3--;
    }
    
    //当a1数组有剩余元素没比较时无需移动,因为已到它的最终位置
    //当a2数组有剩余元素没比较时直接将剩下的元素拷贝到a1数组的前端
    if(cur2 >= 0) {
        while( cur2 >= 0 ) {
            a1[cur2] = a2[cur2];
            cur2--;
        }
    }
    
    for(int i = 0;i < len1 + len2;i++)
        cout<<a1[i]<<" ";
    
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,705评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,380评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 1、多图片或者单图选择框架(如评论,发朋友圈功能、用户头像上传)https://github.com/LuckSi...
    万户猴阅读 306评论 0 3
  • 大学的时候,学校门口有很多小饭馆。华灯初上,熙熙攘攘。到了夜里十点多,总会有各种各样的酒鬼,喊叫,扶着小树呕吐,躺...
    大圆圆圈阅读 402评论 0 0