编写下面的方法,将两个有序列表合并成一个新的有序列表:
public static int[] merge(int[] list1, int[] list2)
只进行list1.length+list2.length次比较来实现该方法。编写一个测试程序,输入两个有序列表,显示合并后的列表。
注意:输入的第一个数字表示列表中元素的个数,该数字不是列表的一部分。
package pack2;
import java.util.Arrays;
import java.util.Scanner;
public class MergeList {
public static void main(String[] args) {
try(Scanner input = new Scanner(System.in);) {
System.out.print("Enter list1: ");
int[] list1 = new int[input.nextInt()];
for (int i = 0; i < list1.length; i++)
list1[i] = input.nextInt();
System.out.print("Enter list2: ");
int[] list2 = new int[input.nextInt()];
for (int i = 0; i < list2.length; i++)
list2[i] = input.nextInt();
System.out.print("The merged list is");
for (int i : merge(list1, list2)) {
System.out.print(" "+i);
}
}
}
/**合并两个有序列表(方法一)*/
public static int[] merge(int[] list1, int[] list2) {
int[] list3 = new int[list1.length + list2.length];
System.arraycopy(list1, 0, list3, 0, list1.length);
System.arraycopy(list2, 0, list3, list1.length, list2.length);
Arrays.parallelSort(list3);
return list3;
}
/**合并两个有序列表(方法二)*/
public static int[] merge1(int[] list1, int[] list2) {
int[] list3 = new int[list1.length + list2.length];
int currentList1 = 0;
int currentList2 = 0;
int currentList3 = 0;
while(true) {
list3[currentList3++] = (list1[currentList1] < list2[currentList2]) ?
list1[currentList1++] : list2[currentList2++];
if(currentList1 >= list1.length || currentList2 >= list2.length) break;
}
while(currentList3 < list3.length)
list3[currentList3++] = (currentList1 < list1.length) ? list1[currentList1++]
: list2[currentList2++];
return list3;
}
}