剑指offer面试题4拓展——已排序数组的合并

news/2025/6/19 18:05:36

题目:有两个排序的数组A1和A2,内存在A1的末尾有足够的空间来容纳数组A2,请实现一种函数,把A2的所有数字插入到A1中并且所有的数字是排序的

//思路:设置两个索引indexofA1,indexofA2分别指向数组A1和A2的最后一个元素,即两个数组的尾部;
//比较两个索引指向的元素的大小:若indexofA1指向的元素(即A1[indexofA1])大于indexofA2指向的元素(即A2[indexofA2]),则将indexofA1指向的元素拷贝到临时数组Temp中(Temp从后往前拷贝),然后indexofA1向前移动一个位置,然后再将indexA1指向的元素与indexofA2指向的元素进行比较;若indexofA1指向的元素小于indexofA2所指向的元素,则将indexofA2指向的元素拷贝到临时数组,indexofA2--,然后再将indexA2指向的元素与indexofA1指向的元素进行比较;若indexofA1指向的元素和indexofA2指向的元素相等,则将这两个元素都拷贝到数组Temp中,然后indexofA1--,indexofA2--;以此类推,直到数组A1和A2的元素全部拷贝到数组Temp中, 最后将数组Temp中的全部元素依次复制数组A1中。这里用到了辅助内存temp[]

代码

//有两个排序的数组A1和A2,内存在A1的末尾有足够的空间来容纳数组A2,请实现一种函数,把A2的所有数字插入到A1中并且所有的数字是排序的//思路:设置两个索引indexofA1,indexofA2分别指向数组A1和A2的最后一个元素,即两个数组的尾部;
//比较两个索引指向的元素的大小:若indexofA1指向的元素(即A1[indexofA1])大于indexofA2指向的元素(即A2[indexofA2]),
//                                 则将indexofA1指向的元素拷贝到临时数组Temp中,然后indexofA1向前移动一个位置,然后再将indexA1指向的元素与indexofA1指向的元素进行比较
//
//                             若indexofA1指向的元素小于indexofA2所指向的元素,则将index
//
#include<iostream>
using namespace std;
#define A1length 4
#define A2length 5
void Array_Merge(int A1[],int n1,int A2[],int n2)//n1,n1分别为数组A1和A2中实际元素的数目
{if(A1==NULL || A2==NULL || n1<=0 ||n2<=0){cout<<"invalid parameter!"<<endl;return ;}int totallength=n1+n2-1;int indexofA1=n1-1;int indexofA2=n2-1;int *Temp=(int *)malloc(sizeof(int)*(n1+n2));if(Temp==NULL){cout<<"insufficient memory!"<<endl;return;}while(indexofA1>=0 && indexofA2>=0 )//{if(A2[indexofA2]>A1[indexofA1]){Temp[totallength--]=A2[indexofA2];indexofA2--;}else if(A2[indexofA2]<A1[indexofA1]){Temp[totallength--]=A1[indexofA1];indexofA1--;}else{Temp[totallength--]=A1[indexofA1];Temp[totallength--]=A2[indexofA2];indexofA1--;indexofA2--;}}while(indexofA2>=0)//考虑A1的索引indexofA1先变为-1,此时A1的元素已经全部拷贝到数组Temp中,//此后只需将A2的剩余元素依次拷贝到数组Temp中;{Temp[totallength--]=A2[indexofA2];indexofA2--;}//cout<<"indexofA2:"<<indexofA2+1<<endl;while(indexofA1>=0)//考虑A2的索引indexofA2先变为-1,此时A2的元素已经全部拷贝到数组Temp中,//此后只需将A1的剩余元素依次拷贝到数组Temp中;{Temp[totallength--]=A1[indexofA1];indexofA1--;}//cout<<"indexofA1:"<<indexofA1+1<<endl;for(int i=0;i<=n1+n2-1;i++){A1[i]=Temp[i];}
}
int main(void)
{int A1[10];int A2[5];int i;cout<<"input the array A1:"<<endl;for(i=0;i<A1length;i++)cin>>A1[i];cout<<"input the array A2:"<<endl;for(i=0;i<A2length;i++)cin>>A2[i];Array_Merge(A1,A1length, A2,A2length);for(i=0;i<A1length+A2length;i++){cout<<A1[i]<<" ";}cout<<endl;return 0;
}



https://dhexx.cn/news/show-3380713.html

相关文章

Adobe是什么软件?

Adobe是一家跨国软件公司&#xff0c;总部位于美国加利福尼亚州。 Adobe公司开发和销售的软件广泛应用于图形设计、影像处理、多媒体内容创作、网页开发等领域。 Adobe公司的软件产品包括Photoshop、Illustrator、InDesign、Acrobat、Premiere Pro、After Effects等&#xff…

eclipse打jar包

今天给spark项目打jar包&#xff0c;报错&#xff1a;JAR creation failed. See details for additional information. Resource is out of sync with the file system: /WordCountSpark/.cache.解决办法&#xff1a;eclipse里clean一下项目即可&#xff0c;出现这个问题是因…

Android中关于主线程的理解

在Android中&#xff0c;四大组件运行在主线程中&#xff0c;在主线程中做耗时操作会导致程序出现卡顿甚至出现ANR异常&#xff0c;一个基本常识就是将耗时操作放到子线程中去处理&#xff0c;然后通过Handler回调到主线程。 但是有三点还需要注意&#xff1a; 1 因为四大组件…

bgd

我是北京工业大学耿丹学院信息系中软14-1班&#xff0c;陈宇。 我的专业是计算机科学与技术&#xff0c;这是我的第一次随笔。 我的兴趣爱好是上网&#xff0c;看电影&#xff0c;打网球。毕业之后大概就是从事IT方面的工作。 熟悉的编程语言就是在学校学习的c,java。在学校的老…

设计模式之三--单例模式《转载》

概念&#xff1a;  Java中单例模式是一种常见的设计模式&#xff0c;单例模式的写法有好几种&#xff0c;这里主要介绍三种&#xff1a;懒汉式单例、饿汉式单例、登记式单例。  单例模式有以下特点&#xff1a;  1、单例类只能有一个实例。  2、单例类必须自己创建自己…

smali代码相关

一.smali调试&#xff1a;调试Smali代码主要任务是解决注入代码后导致的运行时错误。具体的说&#xff0c;就是使注入后的Smali代码通过dalvik虚拟机的字节码校验。获取错误的方法相对简单&#xff0c;使用下面两条命令即可&#xff1a;adb logcat | grep dalvikvmadb logcat |…

iOS 蓝牙获取MAC地址

援引&#xff1a;http://www.jianshu.com/p/1d6a8fc8134f iOS要获取蓝牙设备的MAC地址有两种&#xff1a;一是硬件工程师开通的服务特征下有MAC的信息&#xff0c;我们就从通道中获取&#xff1b;二是硬件工程师在扫描中设备信息中放置MAC信息&#xff0c;我们从有RSSI的函数中…

FXS/FXO, BRI/PRI, IPPBX

FXO - Foreign Exchange Office 外部交换局。简单的理解它是 PBX 交换机上用来同公共电话网相连的接口。也就是是中央交换局交换机和数字电话交换系统之间的一个中继端连接。相对于中心局而言&#xff0c;它模拟一台PABX分机&#xff0c;可实现一部普通电话机与一部多路复用器的…

如何修改linux用户密码?

如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password: Retype new password: 按提示输入密码确认即可. 如果想更改其他用户密码,只要输入passwd username即可. 如&#xff1a;hadoop用户&#xff08;passwd hadoop&#xff09;New password: Retyp…

SQL之TCL

TCL&#xff08;Transaction Control Language&#xff09;事务控制语言 COMMIT 提交SAVEPOINT 设置保存点ROLLBACK 回滚SET TRANSACTION 转载于:https://www.cnblogs.com/Skyyj/p/6514874.html