基本思路

  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. Ubuntu14.04LTS下安装Node.js&NPM以及个人博客hexo的初始化配置

    什么是hexo Hexo 是一款基于node 的静态博客网站生成器作者 :tommy351是一个台湾的在校大学生...相比其他的静态网页生成器而言有着,生成静态网页最快,插件丰富(已经移植了大量Oct ...

  2. 461. Hamming Distance(leetcode)

    The Hamming distance between two integers is the number of positions at which the corresponding bits ...

  3. Codeforces Round #439 (Div. 2) C DP(图论)

    C. The Intriguing Obsession time limit per test 1 second memory limit per test 256 megabytes input s ...

  4. LeetCode 35. Search Insert Position (搜索嵌入的位置)

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  5. 读书笔记-你不知道的JS上-词法作用域

    JS引擎 编译与执行 Javascript引擎会在词法分析和代码生成阶段对运行性能进行优化,包含对冗余元素进行优化(例如对语句在不影响结果的情况下进行重新组合). 对于Javascript来说,大部分 ...

  6. RabbitMQ-客户端

    Install-Package RabbitMQ.Client 参考: http://www.rabbitmq.com/download.html https://www.nuget.org/pack ...

  7. Python Web框架篇:Django cookie和session

    part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...

  8. linux学习(十一)用户和用户组管理

    一.用户文件 文件:/etc/passwd 这个文件记录了用户了用户名,用户id,所属组,家目录,shell信息: [root@iZ25lzba47vZ ~]# tail -n3 /etc/passw ...

  9. 0_Simple__simpleCallback

    学习回调函数的基本概念,并在CUDA的任务流中插入基于CPU的主机函数,作为回调函数使用. ▶ 源代码:没有用到的部分被注释起来了 /*multithreading.h*/ #ifndef MULTI ...

  10. replace 使用函数作为第二参数

    var sToChange = “The sky is red.”;var reRed = /red/;var sResultText = sToChange.replace(reRed, funct ...