有两个有序的数据 a[],b[], 他们都是升序的,将他们合并成数据c[] ,要求也是升序的
要求时间复杂度是 O(n)
请考虑边界条件,避免程序出现异常
package xyz.songxl;
public class mergeArray {
public static void main(String[] args) {
int a[] ={1,3,5,7,7,10};
int b[] ={-2,2 ,100};
int c[] = merge(a,b);
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]+"\t");
}
}
/**
* <p>有两个有序的数据 a,b 现在要将他们合并成数组c,要求也是升序的
* 要求时间复杂度是 O(n)
* 请考虑边界条件,避免程序出现异常
* </p>
* @param a
* @param b
* @return
*/
public static int[] merge(int a[], int b[]) {
int ia = 0,ib = 0,ic=0; // 各数组的下标
int maxa = a.length; // 个数组的最大长度
int maxb = b.length;
int maxc = maxa + maxb;
int c[] = new int[maxc];
for ( ; ic < maxc; ic++) {
if (ia<maxa && ib<maxb) { // 两个数组中都还有元素 比较大小 把小的数据放到数组c
if (a[ia]<= b[ib]) {
c[ic] = a[ia];
ia++;
}else {
c[ic] = b[ib];
ib++;
}
}else if (ia<maxa && ib>=maxb) { // a数组中还有数据,b 数据没有了的情况 将a中剩下的数据拷贝到数组c
for ( ; ia < maxa; ia ++,ic++) {
c[ic] = a[ia];
}
// 或者直接使用数据拷贝函数 arraycopy 实现数据复制的功能
// System.arraycopy(a, ia, c, ic, maxa-ia);
}else if (ia>=maxa && ib<maxb) {// b 数组中还有数据,a 数据没有了的情况 将b中剩下的数据拷贝到数组c
for ( ; ib < maxb; ib ++,ic++) {
c[ic] = b[ib];
}
// System.arraycopy(b, ib, c, ic, maxb-ib);
}
}
return c;
}
}