ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java、合并两个有序列表

2022-02-28 13:02:13  阅读:198  来源: 互联网

标签:Java 序列表 int list1 合并 list3 list2 ++ length


        编写下面的方法,将两个有序列表合并成一个新的有序列表:
        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,序列表,int,list1,合并,list3,list2,++,length
来源: https://blog.csdn.net/m0_62659797/article/details/122949510

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有