找到最大的两个数组,将结果存储在第三个数组中

时间:2014-05-21 08:10:17

标签: java arrays sorting

如何排序成两个数组并存储在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]) {

                }
            }
        }
    }
}

3 个答案:

答案 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进行排序。

但如果你特别关注合并排序

合并排序的工作原理如下

  • 将未排序的列表分成n个子列表,每个子列表包含1个元素(1个元素的列表被视为已排序)。
  • 重复合并子列表以生成新的子列表,直到只剩下1个子列表。这将是排序列表。

最终的计划就像

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个数组再次重复该过程,依此类推,直到得到一个数组。这将被分类。

希望这会有所帮助。如果您有更多问题,请询问。