java 合并两个数组 三种解法

package datastruct.usearray;

import java.util.Arrays;
import java.util.LinkedList;
/**
 * 合并两个数组      int a[]={0,1,5,6,7,9,14};
		     int b[]={2,4,8,10,13};
 *
 */
public class MergeTwoArray {
	//方法一:
	  private static void method1(int a[],int b[],int array[]) {
		//建立c数组,并将a添加进去  
		int c[]= Arrays.copyOf(a, a.length+b.length);
		//将b数组添加到已经含有a数组的c数组中去
		System.arraycopy(b, 0, c, a.length, b.length);
        //对c数组进行排序
		Arrays.sort(c);
        System.out.println("方法一:");
		for (int i = 0; i < c.length; i++) {
			System.out.print(c[i]+" ");
		}
	}
	 
	  //方法二:集合方法  使用LinkedList 队列
	  private static void method2(int array[],LinkedList<Integer> queue_a,LinkedList<Integer> queue_b ) {
		 //每循环一次,添加一个最小元素进入arrays
		  for (int i = 0; i < array.length; i++) {
			  //两个队列都不为空时,谁小取出谁
			 if (!queue_a.isEmpty()&&!queue_b.isEmpty()) {
				  if (queue_a.peek()<queue_b.peek()) {
					  array[i]=queue_a.poll();
					  continue;
				}else {
					array[i]=queue_b.poll();
					continue;
					}
			}
			 //当数组a为空时,取数组b的元素
				  if (queue_a.isEmpty()&&!queue_b.isEmpty()) {
					array[i]=queue_b.poll();
					continue;
				}
			 //当数组b为空时,取数组a的元素	  
				  if (queue_b.isEmpty()&&!queue_a.isEmpty()) {
					array[i]=queue_a.poll();
					continue;
				}
		}
		System.out.println("方法二:");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]+" ");
		}
	}
	 //方法三:递归方法
	  private static int [] method3(int a[],int a_start,int b[],int b_start,int array[],int array_start) {
		   
		   //若数组a中的元素都已经放到array数组中,而数组b未全部放到array中,
		   //那么将b中剩余的元素放到array中
           if (a_start>=a.length) {
              	for (int i = array_start; i < array.length; i++) {
					array[array_start]=b[b_start++];
				}
              	return array;
           }
           //若数组b中的元素都已经放到array数组中,而数组a未全部放到array中,
		   //那么将a中剩余的元素放到array中
           if (b_start>=b.length) {
			   for (int i = array_start; i < array.length; i++) {
				    array[array_start]=a[a_start++];
			}
			   return array;
		   }   	
           //将数组的头元素,b数组头元素 中的最小值赋予给array
           if (a[a_start]<b[b_start]) {
			  array[array_start]=a[a_start];
		     return	  method3(a, a_start+1, b, b_start,  array, array_start+1);
		   }else {
			   array[array_start]=b[b_start];
		     return	  method3(a, a_start, b, b_start+1, array, array_start+1); 
		    }
           
		}	
           
	
      public static void main(String[] args) {
		int a[]={0,1,5,6,7,9,14};
		int b[]={2,4,8,10,13};
		LinkedList<Integer> queue_a=new LinkedList<>();
		for (int i = 0; i < a.length; i++) {
			queue_a.offer(a[i]);
		}
		LinkedList<Integer> queue_b=new LinkedList<>();
		for (int i = 0; i < b.length; i++) {
			queue_b.offer(b[i]);
		}
		int array[]=new int[a.length+b.length];
		
		method1(a, b, array);
		System.out.println();
		method2(array, queue_a, queue_b);
		System.out.println("\n方法三:");
		int all[]=method3(a, 0, b, 0, array, 0);
		for (int i : all) {
			System.out.print(i+" ");
		}
		
	}
}
运行结果: 

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值