前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 将两个有序数组合成为一个有序数组

Java 将两个有序数组合成为一个有序数组

作者头像
Rekent
发布2018-09-04 15:37:01
1.7K0
发布2018-09-04 15:37:01
举报
文章被收录于专栏:日常分享

基本思路

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

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

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

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

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

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

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

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


源代码

代码语言:javascript
复制
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,SecondArr,IndexOfSArr);
                return ResultArr;
            }
            if(IndexOfSArr>SecondArr.length-1){
                ResultArr=addArr(ResultArr,IndexOfRArr,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;
    }

验证函数

代码语言:javascript
复制
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]+"  ");
        }
    }

结果预览

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本思路
  • 源代码
  • 验证函数
  • 结果预览
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档