Java教程

Java、合并两个有序列表

本文主要是介绍Java、合并两个有序列表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

这篇关于Java、合并两个有序列表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!