java有序数组合并_java合并两个有序数组的算法(抛砖引玉)

packagecom.hudai.platform.manager;importjava.util.Arrays;/*** 算法测试 合并两个有序数组到一个数组中

*

*@authorWanHongLei

*@version创建时间:2019年2月13日 上午11:14:13 类说明*/

public classMergeTester {public static void main(String[] args) throwsException {int[] a = { 1, 2, 2, 3, 4, 5};int[] b = { 5, 7, 9, 13};

System.out.println(Arrays.toString(mergeArr(a, b)));

}/*** 思路: 1.新建一个数组大小为firArr和secArr之和的数组mergeArr

* 2.如果fistArr的第一个元素大于等于secArr的最后一个元素,则直接对mergeArr进行元素赋值

* 3.如果secArr的第一个元素大于secArr的最后一个元素,则直接对mergeArr进行元素赋值

* 4.若不满足上面两种情况,则需要进行数组拆分

* 1)设置数组firArr和数组secArr的索引index,初始值都为0

* 2)循环mergeArr数组

* 3)如果当前firArr的索引小于firArr数组大小且secArr的索引小于secArr数组的大小,判断firArr、secArr两数组对应位置的元素大小,将值小的数组的那个值赋值给mergeArr,并向后移动一位此数组的index

* 4)如果当前位置小于firArr或者secArr两数组的大小,进行相应的复制(走到这个循环中,只能表示说,有一个数组已经索引完毕了)

*

*@paramfirArr

* 第一个数组

*@paramsecArr

* 第二个数组

*@return合并之后的数组*/

private static int[] mergeArr(int[] firArr, int[] secArr) {int firlen =firArr.length;int seclen =secArr.length;int[] mergeArr = new int[firlen +seclen];if (firArr[0] >= secArr[seclen - 1]) {for (int i = 0; i < mergeArr.length; i++) {if (i

mergeArr[i]=secArr[i];

}else{

mergeArr[i]= firArr[i -seclen];

}

}

}else if (secArr[0] >= firArr[firlen - 1]) {for (int i = 0; i < mergeArr.length; i++) {if (i

mergeArr[i]=firArr[i];

}else{

mergeArr[i]= secArr[i -firlen];

}

}

}else{int indexFir = 0, indexSec = 0;for (int i = 0; i < mergeArr.length; i++) {if(indexFir < firlen && indexSec secArr[indexSec]) {

mergeArr[i]=secArr[indexSec];

indexSec++;

}else if (firArr[indexFir]

mergeArr[i]=firArr[indexFir];

indexFir++;

}

}else if(indexFir

mergeArr[i]=firArr[indexFir];

indexFir++;

}else if(indexSec

mergeArr[i]=secArr[indexSec];

indexSec++;

}

}

}returnmergeArr;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值