如何排序成两个数组并存储在java中的另一个数组中?
public class SortingDemo {
public static void main(String[] args) {
int[] num1 = new int[ ] {5,6,2,8};
int [] num2 = new int[] {1,4,10,7};
merge(num1, num2);
}
public static int[] merge(int [] num1,int [] num2) {
int num1_size = num1.length;
int num2_size = num2.length;
for (int i = 0; i < num1.length; i++) {
// System.out.println(num1[i]);
for (int j = 0; j < num2.length; j++) {
if (num1[i] > num2[j]) {
}
}
}
}
}
答案 0 :(得分:0)
可能你应该这样做。
public static void main(String[] a)
{
int[] num1= new int[] {5,6,2,8};
int[] num2= new int[] {1,4,10,7};
System.out.println(getMax(num1, num2));
}
private static int getMax(int[] a, int[] b)
{
int max = Integer.MIN_VALUE;
for (int val : a)
{
if (val > max)
max = val;
}
for (int val : b)
{
if (val > max)
max = val;
}
return max;
}
答案 1 :(得分:0)
您想要对数组进行排序并将它们合并以获得排序数组吗?
public static void main(String[] a) {
int[] num1= new int[] {5,6,2,8};
int[] num2= new int[] {1,4,10,7};
sortInPlace(num1);
sortInPlace(num2);
int[] result = merge(num1, num2);
}
实现sortInPlace和merge方法。
答案 2 :(得分:0)
我想你并不是特别关于合并排序。您只需要创建第三个数组并将结果合并到第3个数组中并对其进行排序。
我就是这样做了一个像
这样的新数组int[] num3 = new int[num1.length + num2.length];
System.arraycopy(num1, 0, num3, 0, num1.length);
System.arraycopy(num2, 0, num3, num1.length, num2.length);
并使用任何排序算法对num3进行排序。
但如果你特别关注合并排序
合并排序的工作原理如下
最终的计划就像
import java.util.Arrays;
public class SortingDemo {
public static void main(String[] args) {
int[] num1 = new int[] { 5, 6, 2, 8 };
int[] num2 = new int[] { 1, 4, 10, 7 };
// Combine both into thrid array
int[] num3 = new int[num1.length + num2.length];
System.arraycopy(num1, 0, num3, 0, num1.length);
System.arraycopy(num2, 0, num3, num1.length, num2.length);
// Sort third array
mergeSort(num3);
System.out.println(Arrays.toString(num3));
// Largest number of two array
System.out.println("Largest : " + num3[num3.length - 1]);
}
public static int[] mergeSort(int[] arrayData) {
if (arrayData.length <= 1) {
return arrayData;
}
int[] first = new int[arrayData.length / 2];
int[] second = new int[arrayData.length - first.length];
System.arraycopy(arrayData, 0, first, 0, first.length);
System.arraycopy(arrayData, first.length, second, 0, second.length);
mergeSort(first);
mergeSort(second);
merge(first, second, arrayData);
return arrayData;
}
private static void merge(int[] first, int[] second, int[] result) {
int iFirst = 0;
int iSecond = 0;
int j = 0;
while (iFirst < first.length && iSecond < second.length) {
if (first[iFirst] < second[iSecond]) {
result[j] = first[iFirst];
iFirst++;
} else {
result[j] = second[iSecond];
iSecond++;
}
j++;
}
System.arraycopy(first, iFirst, result, j, first.length - iFirst);
System.arraycopy(second, iSecond, result, j, second.length - iSecond);
}
}
根据评论说明。
你有两个数组,每个数组包含4个元素。 { 5, 6, 2, 8 }
和{ 1, 4, 10, 7 }
。要求是创建一个组合这些数组的新数组,并对新创建的数组进行排序。所以不要先声明一个新数组。它的大小将是数组1的长度+数组2的长度。所以我们创建数组
int[] num3 = new int[num1.length + num2.length];
现在我们需要将两个数组中的值复制到新数组中。通常的做法是使用System.arraycopy方法。参数列表是(源数组,从源复制的初始位置,目标数组,目标上的复制位置,要复制的元素总数)。所以我们会喜欢
System.arraycopy(num1, 0, num3, 0, num1.length);
首先,它从第0个索引开始的num1复制到新数组num3,从第0个索引开始复制,从num1开始复制所有元素。它等于写入num3 [0] = num1 [0]; num3 [1] = num1 [1];等于num1的长度,如num3 [3] = num1 [3]。 (即长度是指数0到4)。
System.arraycopy(num2, 0, num3, num1.length, num2.length);
所以我们第二次复制时,我们已经在num3中有值,直到第三个索引。所以我们需要从第4个索引开始,即num3 [4] = num2 [0]。这就是我们将第三个参数设置为num1.length的原因。休息类似于第一份副本。
所以现在我们有一个新数组,其中包含num1和num2的组合值。第二个要求是对它进行排序。如果您不想编写任何特殊的排序算法,您可以使用Arrays类提供的标准排序。像
Arrays.sort(num3);
这将对新的组合数组进行排序。或者,我们可以自己分类。然后我们可以做任何类型的排序。比如冒泡排序或合并排序或快速排序或任何事情。您可以通过http://www.sorting-algorithms.com/或http://thilinasameera.wordpress.com/2011/06/01/sorting-algorithms-sample-codes-on-java-c-and-matlab/
中的示例了解所有这些算法由于评论是关于合并排序我只是选择合并排序。构思或合并排序将数组拆分为两个排序数组,然后按排序顺序将其合并为一个新数组。所以在这种情况下,首先我们将num3分成一半。然后一次又一次地将每个分成两半,直到通过递归调用数组的大小为1。这是在方法mergeSort()
的第一部分完成的。这意味着{5,6,2,8,1,4,10,7}
现在将来{5},{6},{2},{8},{1},{4},{10},{7}
。这里的想法是,如果一个数组只有一个元素,那么可以认为它是有序的。所以现在我们有8个数组。现在我们需要以排序的方式合并这些,一次取2个数组。这就是merge()
方法的作用。
首先,我将采用{5}和{6}并以排序方式{5,6}合并为一个。然后将{2}和{8}合并到{2,8},依此类推,制作4个数组,每个数组包含2个元素。 {5,6},{2,8},{1,4},{7,10}。现在用这4个数组再次重复该过程,依此类推,直到得到一个数组。这将被分类。
希望这会有所帮助。如果您有更多问题,请询问。