寫一個合併數組的方法,將兩個已排序的數組合併成一個有序的大數組。方法的原型如下:
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;
}
}