思想:分别取两个数组A , B的第一个元素a1,b1,进行比较。如果a1>b1,则将b1放入合并后的数组中,如果a1<b1,则将a1放入合并后的数组中。然后再用a1和b1中的较大者与不在同一数组的第二个元素进行比较,一次类推。其算法的复杂度为两个数组长度之和
package com.wxq.test;
public class JoinClassWithOrder {
public static void main(String args[]){
int [] tmp1 = {1,3,5,7,10,20,22,23} ;
int [] tmp2 = {4,6,9,30,35,45,78};
int tmp1Length = tmp1.length;
int tmp2Length = tmp2.length;
int totle = tmp1Length +tmp2Length ;
StringBuffer sb = new StringBuffer();
int index1 = 0,index2 =0;
int tmp = tmp1[index1];
boolean flag = true ;
for(int i =0; i < totle ; i++){
//处理最后一个数字
if( i == totle-1 && flag ){
sb.append(tmp1[tmp1Length-1]);
break;
}else if( i== totle -1 && !flag){
sb.append(tmp2[tmp2Length -1]);
break;
}
//处理其他数据。flag :指示比较的对象
if(flag){
if(tmp < tmp2[index2]){
sb.append(tmp +"||");
tmp = tmp2[index2];
index1++ ;
if(index1 == tmp1Length){
for(; index2 < tmp2Length ; index2++)
sb.append(tmp2[index2] + "||");
break;
}
flag = false ;
}else{
sb.append(tmp2[index2] +"||");
index2++;
if(index2 == tmp2Length){
// index2 = tmp2Length -1 ;
for(; index1 < tmp1Length ; index1++)
sb.append(tmp1[index1] + "||");
break ;
}
flag = true ;
}
}else{
if(tmp < tmp1[index1] ){
sb.append(tmp +"||");
tmp = tmp1[index1];
index2++;
if(index2 == tmp2Length){
for(; index1 < tmp1Length ; index1++)
sb.append(tmp1[index1] + "||");
break ;
}
flag = true;
}else{
sb.append(tmp1[index1] +"||");
index1++;
if(index1 == tmp1Length){
for(; index2 < tmp2Length ; index2++)
sb.append(tmp2[index2] + "||");
break;
}
flag = false;
}
}
}
System.out.println(sb.toString());
}
}
昨晚看了其他一些文章,有了一些启示,先修改代码如下
public static String mergerArray(int [] first , int [] second){
int firsLength = first.length;
int secdLenght = second.length;
int totle = firsLength + secdLenght ;
StringBuffer sb = new StringBuffer();
int m=0 ,n =0;
for(int index = 0 ;index < totle ; index ++ ){
if(first[m] <= second[n]){
sb.append(first[m] + "--");
m++;
if(m == firsLength){
for(int i = n ; i < secdLenght ; i ++){
sb.append(second[i] + "--");
}
return sb.toString();
}
}else{
sb.append(second[n] + "--");
n++;
if(n == secdLenght){
for(int i = m ; i < firsLength ; i ++){
sb.append(first[i] + "--");
}
return sb.toString();
}
}
}
return sb.toString();
}