编写下面的方法,将两个有序列表合并成一个新的有序列表:
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; } }