基本思路

  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

最新文章

  1. Kafka如何创建topic?
  2. HttpClient相关
  3. 问题-[Delphi]无法设置断点
  4. Qt 学习之路:坐标系统
  5. 写了一个复杂的sql语句
  6. 【分解爪UVA11396-二分图染色模板】
  7. mybatis是如何防止SQL注入的
  8. python之路--管道, 事件, 信号量, 进程池
  9. 学习go语言编程系列之定义变量
  10. liunx之Centos6.8杀毒软件的安装
  11. Codeblocks 常用快捷键
  12. cxf简单例子
  13. vue2总结
  14. 修改maven项目的编译版本
  15. Leetcode题库——46.全排列
  16. numpy pandas matplotlib
  17. Jumpserver代码规范
  18. 创建数据库表的SQL语句
  19. minic 符号表
  20. JS作计算器

热门文章

  1. 【转】各种图(流程图,思维导图,UML,拓扑图,ER图)简介
  2. 在 JPA、Hibernate 和 Spring 中配置 Ehcache 缓存
  3. 深入理解final和static关键字
  4. Ubuntu on win10
  5. django-rest-framework之序列化
  6. angular之scope详解
  7. 2017广东工业大学程序设计竞赛决赛-tmk买礼物
  8. Problem E 
  9. awk内置函数
  10. CSS实现自适应不同大小屏幕的背景大图