15、将两个数组合并,并顺序排列

编程题目:

15.有两个数组,a[1,3,5,7,9],b[0,2,4,6,8],请将两个数组合并,并顺序排列。

示例代码:

package program.calculation.exercise15;

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;

/**
 * 15.有两个数组,a[1,3,5,7,9],b[0,2,4,6,8],请将两个数组合并,并顺序排列。
 */

public class ArrayCombine {
    public static void main(String[] args) {

        int[] a = {1,3,5,7,9};
        int[] b = {0,2,4,6,8};
        int[] arr = new int[a.length+b.length];

        combine1(a,b,arr);

        combine2(a,b,arr);

        int[] array = combine3(a,0,b,0,arr,0);
        System.out.println("\n第三种方式:");
        for(int n : array){
            System.out.print(n+" ");
        }

    }

     // 第一种方式:数组复制
     // 1.Arrays.copyOf(int[] original, int newLength):将一个数组复制进一个空数组中
     //   original:需要复制的数组
     //   newLength:新数组的长度
     // 2.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length):
     //      将一个数组复制进一个非空数组中
     //   src:需要复制的数组
     //   srcPos:需要复制的数组起始下标
     //   dest:目标数组
     //   destPos:目标数组的起始下标
     //   length:需要复制的数组长度
    private static void combine1(int a[],int b[],int arr[]) {  

        //将a添加进数组arr中   
        arr = Arrays.copyOf(a, a.length+b.length);  
        //将b数组添加到已经含有a数组的arr数组中去  
        System.arraycopy(b, 0, arr, a.length, b.length);  
        //对arr数组进行排序  
        Arrays.sort(arr);  
        System.out.println("第一种方式:");  
        for (int i=0;i" ");  
        } 

    }  

     // 第二种方式:  使用Queue队列  
     // 1.Queue.add(Integer e):将元素添加进对列
     // 2.Queue.peek():获得队首元素,但不出队
     // 3.Queue.poll():获得队首元素,出队
    private static void combine2(int a[],int b[],int arr[]) {  

        Queue queue_a = new ArrayDeque();
        for(int i=0;i queue_b = new ArrayDeque();
        for(int i=0;i//每循环一次,添加一个最小元素进入arr 
        for (int i=0;i//两个队列都不为空时,谁小取出谁  
            if (!queue_a.isEmpty() && !queue_b.isEmpty()) {  
                if (queue_a.peek() < queue_b.peek()) {  
                    arr[i] = queue_a.poll();  
                    continue;  
                }else {  
                    arr[i] = queue_b.poll();  
                    continue;  
                }  
            }  
           //当数组a为空时,取数组b的元素  
           if (queue_a.isEmpty() && !queue_b.isEmpty()) {  
                arr[i] = queue_b.poll();  
                continue;  
           }  
           //当数组b为空时,取数组a的元素      
           if (queue_b.isEmpty() && !queue_a.isEmpty()) {  
                arr[i] = queue_a.poll();  
                continue;  
           }  
      }

      System.out.println();
      System.out.println("第二种方式:");  
      for (int i = 0; i < arr.length; i++) {  
          System.out.print(arr[i]+" ");  
      }  
   }  

    // 第三种方式:递归方法  
    private static int[] combine3(int a[],int a_start,int b[],int b_start,int arr[],int arr_start){  

         //若数组a中的元素都已经放到arr数组中,而数组b未全部放到arr中,  
         //那么将b中剩余的元素放到arr中  
         if (a_start >= a.length) {  
              for (int i=arr_start;ireturn arr;  
         }  
         //若数组b中的元素都已经放到arr数组中,而数组a未全部放到arr中,  
         //那么将a中剩余的元素放到arr中  
         if (b_start >= b.length) {  
             for (int i=arr_start;ireturn arr;  
         }      
         //将a数组的头元素,b数组头元素中的最小值赋予给arr 
         if (a[a_start] < b[b_start]) {  
             arr[arr_start] = a[a_start];  
             return combine3(a, a_start+1, b, b_start, arr, arr_start+1);  
         }else {  
             arr[arr_start] = b[b_start];  
             return combine3(a, a_start, b, b_start+1, arr, arr_start+1);   
          }  

    } 

}

结果显示:

15、将两个数组合并,并顺序排列_第1张图片

你可能感兴趣的:(Java编程(Java,Program))