Java實驗(4) 合併數組

寫一個合併數組的方法,將兩個已排序的數組合併成一個有序的大數組。方法的原型如下:

public static int[] merge(int[] list1, int[] list2)

要求提供一個測試的main函數,讓用戶輸入兩個數組的大小及元素值,最後調用上述方法並輸出合併結果。

輸入輸出方式任選。

例如用戶輸入2 1 5 3 2 5 10,表示第一個數組有2個元素{1,5};第二個數組有3個元素{2,5,10},輸出合併結果爲:1 2 5 5 10


分析:

1、本題的重點在於merge函數部分。

2、要將兩個有序數組合並,對數組中的每個元素依次進行比較,取較小的賦值給新的數組。

3、注意最後有可能出現一個數組中所有元素均已賦值給新數組,而另一個數組還有未添加入新數組的元素的情況,此時只要將該數組剩餘的元素依次添加入新的數組即可,最後merge函數返回該新數組。


                                                     

                                                   

import java.util.Scanner;
public class MergeArrays {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] list1,list2,list;
        int n = input.nextInt();                     //數組1的大小
        list1 = new int[n];
        for(int i = 0;i < n; i++){                        //輸入數組1
            list1[i] = input.nextInt();
        }
        int m = input.nextInt();                      //數組2的大小
        list2 = new int[m];
        for(int i = 0;i < m; i++){                       //輸入數組2
            list2[i] = input.nextInt();
        }
        list = new int[n+m];                       //新的數組存放合併後的數組
        list = merge(list1,list2);                 
        for(int i = 0;i < m+n; i++)
            System.out.print(list[i]+" ");
        System.out.print("\n");
    }
    public static int[] merge(int[] list1,int[] list2)
    {
        int[] list;
        int n = list1.length;
        int m = list2.length;
        int l,t = 0,i = 0,j = 0;
        if(m>n)
            l = m;
        else
            l = n;
        list = new int[n+m];
        while(i<n && j<m){                          //依次合併
            if(list1[i] < list2[j])
            {
                list[t] = list1[i];
                i++;
            }
            else{
                list[t] = list2[j];
                j++;
            }
            t++;
        }
        if(i == n && j < m)                            //添加剩下的元素
        {
            for(int q = j; q < m; q++){
                list[t] = list2[q];
                t++;
            }
        }
        else if(j == m && i < n)
        {
            for(int q = i; q < n; q++)
            {
                list[t] = list1[q];
                t++;
            }
        }
        return list;
    }
}




                                                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章