本文实例为大家分享了C++实现两个有序数组合并的具体代码,供大家参考,具体内容如下

剑指offer面试题5延展题:

问题:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空间容纳A2。请实现一个函数,把A2中所有数字插入A1中,并且所有的数字是排序(默认升序)的。

思路:在合并两个数组(包括字符串)时,从前往后复制每个数字(或字符)则需要重复移动数字(或字符)多次,则考虑从后往前复制就可以减少移动的次数,从而提高效率。

1.n1,n2分别指向数组A1和A2的尾部,strNew指向合并后的数组的尾部;

2.当数组名是一个nullptr指针,或者A1数组是一个空数组则返回;

3.当数组A1[ida]>=A2[idb]或者idb<0时,则复制ida指针所指的数到strNew指向的位置,ida向前移动1格,strNew向前移动1格;

4.当数组A1[ida]

5.直到strNew<0则停止循环。

注意:

输入的n1,n2为数组的长度,作指针时都要-1;

循环终止的条件从合并数组指针入手,合并结束循环终止,即strNew<0;

注意形参和实参的传递,数组传入函数的三种声明func(int *arr), func(int arr[n]), func(int arr[]),返回数组指针的函数int * func( )

#include

#include

using namespace std;

int * insert(int *str1, int *str2, int n1, int n2,int length){

//int *dest = str1;

if(str1 == nullptr || str2 == nullptr || length <= 0){

return 0;

}

int strNew = n1 + n2 - 1;

int ida = n1-1;

int idb = n2-1;

while(strNew >= 0){

if(str1[ida] >= str2[idb] || idb<0){

str1[strNew--] = str1[ida];

ida--;

}

else if(str1[ida] < str2[idb] || ida<0){

str1[strNew--] = str2[idb];

idb--;

}

}

return str1;

//return dest;

}

int main()

{

int n1,n2;

cin>>n1>>n2;

int a[n1],b[n2];

for(int i = 0; i

cin>>a[i];

}

for(int i=0;i

cin>>b[i];

}

//int *c;

//c = insert(a, b, n1, n2, 100);

insert(a, b, n1, n2, 100);

for(int i=0;i

cout<

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-02-06

用c语言编写两个有序数组合并,C++实现两个有序数组的合并相关推荐

  1. c语言二维数组输入数据,c语言编写程序,把下面的数据输入到一个二维数组中:...

    c语言编写程序,把下面的数据输入到一个二维数组中: 答案:3  信息版本:手机版 解决时间 2019-10-07 01:08 已解决 2019-10-06 03:19 1. 编写程序,把下面的数据输入 ...

  2. m被3整除的c语言表达式,C语言编写函数fun,实现从整数m到n,能被3整除

    1.用c语言编写程序,实现输入10个数,分别求其最大值.最小值及平均数,要求用函数实现. #includevoidfun(doublea[10],intn){inti;doubleave,max,mi ...

  3. c语言中求大于的函数,c语言编写函数,求一组数中大于平均值的数的个数.

    C语言编写程序 给定一组数,求大于0,等于0,小于0的数据个数 #define N 10 main(){int num1=0,num2=0,num3=0,i;for(i=0;i 一道C语言题目:求一组 ...

  4. 用C语言编写简化版银行系统:ATM取款机(数组版)

    问题描述: 该银行储蓄系统的目标.结合前面的基础上开始设计一个c版银行储蓄系统,前面刚学完c言的基本操作以及自定义函数,还未涉及指针以及构体.这个简化版银行系统算是结合前面所学的知识的一个总结,适合初 ...

  5. C语言编程>第十周 ⑧ 请编写函数fun,其功能是:将两个两位正整数x、y合并成一个整数放在z中。合并的方式是:将x的十位和个位依次放在z的十位和千位上,y十位和个位依次放在z的百位和个位上。

    例题:请编写函数fun,其功能是:将两个两位正整数x.y合并成一个整数放在z中.合并的方式是:将x的十位和个位依次放在z的十位和千位上,y十位和个位依次放在z的百位和个位上. 例如,当x=12,y=3 ...

  6. (32)SystemVerilog语言编写打两拍

    2.02 SystemVerilog语言编写打两拍 2.2.1 本节目录 1)章节目录: 2)FPGA简介: 3)SystemVerilog简介: 4)SystemVerilog语言编写打两拍: 5) ...

  7. (2)verilog语言编写打两拍

    2.2.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写打两拍: 5)本节结束. 2.2.2 FPGA简介 FPGA(Field Programm ...

  8. C语言向有序数组中插入一个数使该数组仍保持有序

    C语言向有序数组中插入一个数使该数组仍保持有序 #include<stdio.h> int main() {     int n,i,j,t,k;     printf("您喜欢 ...

  9. java输入两个整数_求平均值._用C语言编写:完成从键盘输入两个整数a和b,求平均值ave,并输出平均值...

    #includevoid main(){int a,b,ave;printf("输入两个整数:');scanf("%d%d",&a,&b);ave=(a+ ...

最新文章

  1. O2O业务都跳不出这五大领域
  2. gulp html 模块化,使用Gulp如何实现静态网页模块化具体怎么做?
  3. 4、Power View—卡的应用
  4. C++11多线程thread参数传递问题
  5. Java第2章:变量和运算符
  6. MySQL 5.7安装配置方法
  7. 与postman的第一次亲密接触
  8. mis系统的编写与设计
  9. 为谷歌浏览器Chrome创建多个用户
  10. C++实现截图截屏功能汇总
  11. fopen打开文件名(文件路径含中文或韩语)方法测试
  12. Matlab如何修改坐标轴在figure里面的位置
  13. 全球手机芯片产业格局未定,LTE和中国是最大变数
  14. 不愧是阿里P8!深入理解Java虚拟机pdf百度云
  15. 对一个8位(一字节)数的倒序处理
  16. 高性能分布式缓存Redis(缓存分类 安装 数据类型选择和应用场景 发布订阅 事务 Lua脚本 慢查询日志)
  17. 【愚公系列】2022年01月 Java教学课程 73-反射
  18. html窗口最小宽度和高度,html设置尺寸大小的方法
  19. 渠得清如许,源头活水来——2015年年终总结
  20. 我的世界java营火如何合成_营火 - Minecraft Wiki,最详细的官方我的世界百科

热门文章

  1. 网络通信-7层模型OSI
  2. mysql 数据库设计说明书_1.2 Mysql 数据库规范
  3. 原型模式及简单Java案例代码实现
  4. Gmapping的个人理解
  5. 使用PHP导出Excel时处理复杂表头的万能方法
  6. B2C网站的网络营销策略
  7. 缓解拖延症的12个小技巧
  8. 初学JavaScript:原型继承/盗用构造函数继承/组合继承/寄生式继承/原型式继承/寄生组合式继承
  9. PING命令中TTL的具体含义
  10. SpringBoot工程构建时pom父文件导入失败(父类启动依赖导入失败)