基本思路

  1.如果其中一个数组的元素均大于另一个数组的元素,则可以直接组合,不用拆分。

   即:其中一个数组的第一个元素大于或者小于另一个数组的最后一个元素

  2.若不满足1中的情况,则表明数组需要拆分,拆分的方法如下:

   (1)拆分前,默认两个数组以及最终输出数组的索引均为0;

   (2)将 两个数组 对应索引下的元素进行比较,小的一方 放入最终数组中的当前索引下的位置,并使小的一方数组的索引+1;

   (3)检查是否有数组已经遍历完毕,若有(即该数组的元素已经完全分配到结果数组中),则将另一个数组的剩余元素依次放入最终数组中,直接输出即可。

      (4)最终数组的索引+1,并重复(2),直到两个数组均完成索引任务。

  

      上图为假定的2-3步操作,A,B为要合并的数组,C为最终 输出数组,Index为该次填充后的下次索引变换情况。


源代码

public  int[] sortAndconnectArr(int FirstArr[], int SecondArr[]){
int[] ResultArr=new int[FirstArr.length+SecondArr.length];
//若两个Arr中其中一个Arr的都比另一个大,则能直接合成
if(FirstArr[FirstArr.length-1]<SecondArr[0]){
ResultArr=connectArr(FirstArr,SecondArr);
return ResultArr;
}
if(SecondArr[SecondArr.length-1]<FirstArr[0]){
ResultArr=connectArr(SecondArr,FirstArr);
return ResultArr;
}
//取FirstArr的第一个元素与SecondArr的第一个元素比较
//小的一方,放入ResultArr,并使其索引+1,继续比较,直到最后
int IndexOfFArr=0;
int IndexOfSArr=0;
int IndexOfRArr=0;
while (IndexOfFArr<=FirstArr.length-1||IndexOfSArr<=SecondArr.length-1){
if(FirstArr[IndexOfFArr]<SecondArr[IndexOfSArr]){
ResultArr[IndexOfRArr]=FirstArr[IndexOfFArr];
IndexOfFArr++;
}else {
ResultArr[IndexOfRArr]=SecondArr[IndexOfSArr];
IndexOfSArr++;
} //其中一方的数组已经全部遍历,将余下的数组部分写入ResultArr
//全部遍历完毕则因为IndexOfXX++的原因应该是正好等于Arr.Length
if(IndexOfFArr>FirstArr.length-1){
ResultArr=addArr(ResultArr,IndexOfRArr+1,SecondArr,IndexOfSArr);
return ResultArr;
}
if(IndexOfSArr>SecondArr.length-1){
ResultArr=addArr(ResultArr,IndexOfRArr+1,FirstArr,IndexOfFArr);
return ResultArr;
}
IndexOfRArr++;
}
return ResultArr;
}
public int[] connectArr(int FirstArr[], int SecondArr[]){
int[] ResultArr=new int[FirstArr.length+SecondArr.length];
System.arraycopy(FirstArr, 0, ResultArr, 0, FirstArr.length);
System.arraycopy(SecondArr, 0, ResultArr, FirstArr.length, SecondArr.length);
return ResultArr;
} public int[] addArr(int ResultArr[],int RArrIndex,int AddArr[],int AArrIndex){
while(AArrIndex<=AddArr.length-1){
ResultArr[RArrIndex]=AddArr[AArrIndex];
AArrIndex++;
RArrIndex++;
}
return ResultArr;
}

验证函数

public static void main(String[] args) {
int a[]={1,2,4,55,66,113,157,182,192,201};
int b[]={40,45,66,70,120,140,160,200,1655,1732};
int c[]=sortAndconnectArr(a,b);
for(int i=0;i<c.length-1;i++){
System.out.print(c[i]+" ");
}
}

结果预览

1  2  4  40  45  55  66  66  70  113  120  140  157  160  182  192  200  1655  1732
Process finished with exit code 0

Java 将两个有序数组合成为一个有序数组的更多相关文章

  1. Python3将两个有序数组合并为一个有序数组

    [本文出自天外归云的博客园] 第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性.(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到 ...

  2. 两个有序数组合并为一个有序数组---python

    def merge(a, b): """ 合并2个有序数组,默认a,b都是从小到大的有序数组 """ # 1.临时变量 i, j = 0, ...

  3. Java 将两个Map对象合并为一个Map对象

    实现方式是通过 putAll() 方法将多个 map 对象中的数据放到另外一个全新的 map 对象中,代码如下所示,展示了两个 map 对象的合并,如果是多个 map 合并也是用这种方式. publi ...

  4. [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现

    合并两个有序的链表为一个有序的链表: 类似归并排序中合并两个数组的部分 1.遍历链表1和链表2,比较链表1和2中的元素大小 2.如果链表1结点大于链表2的结点,该结点放入第三方链表 3.链表1往下走一 ...

  5. Java基础知识强化之IO流笔记27:FileInputStream读取数据一次一个字节数组byte[ ]

    1. FileInputStream读取数据一次一个字节数组byte[ ]  使用FileInputStream一次读取一个字节数组: int read(byte[]  b) 返回值:返回值其实是实际 ...

  6. concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

    var arr1 = ['a', 'b', 'c']; var arr2 = ['d', 'e', 'f']; var arr3 = arr1.concat(arr2); // arr3 is a n ...

  7. PHP中的数组(二)常用数组处理函数

    数组的相关处理函数    一.数组键/值操作有关的函数        1.array_values()   无论是关联的还是索引的返回的都是索引数组 <?php $lamp=array(&quo ...

  8. php数组函数(分类基本数组函数,栈函数,队列)

    php数组函数(分类基本数组函数,栈函数,队列函数) 一.总结 1.常用数组函数 函数 描述 array() 创建数组. array_combine() 通过合并两个数组来创建一个新数组. array ...

  9. JS 数组常见操作汇总,数组去重、降维、排序、多数组合并实现思路整理

    壹 ❀ 引 JavaScript开发中数组加工极为常见,其次在面试中被问及的概率也特别高,一直想整理一篇关于数组常见操作的文章,本文也算了却心愿了. 说在前面,文中的实现并非最佳,实现虽然有很多种,但 ...

随机推荐

  1. Ubuntu安装Flash视频插件

    http://www.linuxidc.com/Linux/2014-05/101095.htm

  2. asp.net C# 实现阿里大鱼和云片网短信接口类

    云片网短信通用类 public class YunpianSMS { public YunpianSMS() { } /// <summary> /// 服务器HTTP地址 /// < ...

  3. 【转】认识物理I/O构件- 主机I/O总线

    在数据离开系统内存总线后,它通常传输到另一条总线,即主机I/O总线.在今天的产品中,最常见的主机I/O总线是PCI总线,但也存在着几种其他的总线,如S -总线,EIS A总线及VME总线.主机I/O总 ...

  4. 2017年11月Dyn365/CRM用户社区活动报名

    UG是全球最大Dynamics的用户组织,由最终用户自发组织,由行业有经验的专家自愿贡献知识和经验的非营利机构,与会人员本着务实中立的态度,不进行推介产品,服务以及其他营销行为.在美国,微软Dynam ...

  5. json解析eval()中文乱码问题的解决

    只需要后台post请求中添加: resp.setContentType("text/html;charset=utf-8"); req.setCharacterEncoding(& ...

  6. Judge Route Circle --判断圆路线

    Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot m ...

  7. Stack by pointer

    前言:因为栈的很多操作是基于表的,所以这篇文章里的例程就不再大面积地写注释了,有不理解的地方可以翻看之前的链表笔记,或者直接写在评论区. 咳咳,说到这个栈,很多人乍听之下感觉很陌生.卧槽这是什么玩意. ...

  8. switchhost -- 切换host的工具

    https://github.com/oldj/SwitchHosts/downloads 下载链接: 1,290 downloads SwitchHosts! _v0.2.2.1790.dmg - ...

  9. Best Coder #86 1001 Price List(大水题)

    Price List Accepts: 880 Submissions: 2184 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26214 ...

  10. sersync实现数据实时同步

    1.1 第一个里程碑:安装sersync软件 1.1.1 将软件上传到服务器当中并解压 1.上传软件到服务器上 rz -E 为了便于管理上传位置统一设置为 /server/tools 中 2.解压软件 ...