将具有相同或不同长度的2个不同整数数组合并为一个大数组,并将它们从最小到最大排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将具有相同或不同长度的2个不同整数数组合并为一个大数组,并将它们从最小到最大排序相关的知识,希望对你有一定的参考价值。
在我的一个程序中,我无法合并两个不同的列表并将其放入一个数组并从最小到最大排序。其中一位老师助理表示,我可以对其进行硬编码以使其更容易,或者以更好的方式,更难以做到这一点。我希望以更好的方式做到这一点,以便我能够更好地思考/改进编码.TAs说它在一个for循环中是可行的。一直在思考和尝试约5个小时并放弃。有什么建议?
import java.util.Scanner;
public class Lab10Part1 {
public static void main(String[] args) {
int[] list1, list2;
Scanner input = new Scanner(System.in);
System.out.print("Enter list1 size and contents: ");
int len1 = input.nextInt();
list1 = new int[len1];
for(int i = 0; i < list1.length; i++) {
list1[i] = input.nextInt();
}
System.out.print("Enter list2 size and contents: ");
int len2 = input.nextInt();
list2 = new int[len2];
for(int i = 0; i < list2.length; i++) {
list2[i] = input.nextInt();
}
input.close();
System.out.print("List1 is ");
for(int i = 0; i < list1.length; i++) {
System.out.print(list1[i] + " ");
}
System.out.println();
System.out.print("List2 is ");
for(int i = 0; i < list2.length; i++) {
System.out.print(list2[i] + " ");
}
System.out.println();
System.out.print("The merged list is ");
for(int i = 0; i < merge(list1, list2).length; i++) {
System.out.print(merge(list1, list2)[i] + " ");
}
}
public static int[] merge(int[] list1, int[] list2) {
int[] merge = new int[list1.length + list2.length];
int min = Math.min(list1.length, list2.length);
for(int i = 0, j = 0, k = 0; i < merge.length; k++) {
if (min <= list1.length || min <= list2.length) {
if(list2[j] <= list1[i]) {
merge[k] = list2[j];
j++;
}
else {
merge[k] = list1[i];
i++;
}
min++;
}
else if(list2.length >= list1.length) {
if(list1[i] <= list2[j]) {
merge[k] = list1[i];
i++;
}
else {
merge[k] = list2[j];
j++;
}
}
}
return merge;
}
}
答案
这是一种合并排序列表的方法,并在一个for循环中维护顺序:
public class MergeSort {
public static void main(String[] args) {
int[] a1 = { 1, 5, 6 };
int[] a2 = { 2, 4, 6, 9, 11 };
int[] a3 = merge(a1,a2);
for (int i = 0; i<a3.length; i++)
System.out.printf("%d ", a3[i]);
System.out.println();
}
public static int[] merge(int[] list1, int[] list2) {
int[] merge = new int[list1.length + list2.length];
int i = 0; // Array index for list1
int j = 0; // Array index for list2
for (int k = 0; k < merge.length; k++) {
int v1 = (i < list1.length) ? list1[i] : Integer.MAX_VALUE;
int v2 = (j < list2.length) ? list2[j] : Integer.MAX_VALUE;
if (v1 < v2) {
merge[k] = v1;
i++;
} else {
merge[k] = v2;
j++;
}
}
return merge;
}
}
这创造了输出:
1 2 4 5 6 6 9 11
替代三元运算符
//int v1 = (i < list1.length) ? list1[i] : Integer.MAX_VALUE;
int v1;
if (i < list1.length)
v1 = list1[i];
else
v1 = Integer.MAX_VALUE;
另一答案
我认为你可以通过使用集合(只是List)来解决问题.Array to List的方法是Arrays.asList(array)。然后使用add和sort方法。你可以参考Java Collections api了解更多。原文我的英语不好。
以上是关于将具有相同或不同长度的2个不同整数数组合并为一个大数组,并将它们从最小到最大排序的主要内容,如果未能解决你的问题,请参考以下文章
如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?