练习五:按照顺序,合并数组

思想:分别取两个数组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();
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值