【问题标题】:Merge Sort not returning Appropriate values合并排序不返回适当的值
【发布时间】:2016-12-01 19:28:44
【问题描述】:

我的合并排序程序在理论上对于两个数值等效的数组看起来是正确的,但是返回的值不按顺序排列,而且根本不合适。我在合并列表的末尾收到三个零,甚至没有包含在任何数组中。

public class Merge_Sort
{
    public static void main(String [] args)
    {
        int [] a1 = new int[10];
        int [] b1 = {32, 26, 44, 87, 48, 51, 53, 89, 92, 1};

        a1[0] = 12;
        a1[1] = 36;
        a1[2] = 45;
        a1[3] = 52;
        a1[4] = 48;
        a1[5] = 24;
        a1[6] = 29;
        a1[7] = 98;
        a1[8] = 23;
        a1[9] = 32;

        int i = 0, j = 0, k = 0;
        int[] merge = new int[a1.length + b1.length];

        while (i < a1.length && j < b1.length) {
            if (a1[i] < b1[j]) {
                merge[k] = a1[i];
                i++;
            } else {
                merge[k] = b1[j];
                j++;
            }
            k++;
        }

        for (int x : merge) {
            System.out.println(x);
        }
    }
}

【问题讨论】:

标签: java array-merge


【解决方案1】:

这不是归并排序,而只是归并步骤。 它假定输入数组已经排序,但在您的示例中并非如此。

此外,它也不完整:如果到达数组的末尾怎么办?剩下的元素会怎样?

【讨论】:

  • 那我建议你阅读一下mergesort。网上有很多资料。
  • @JayLav 没有必要咄咄逼人:) 我们都在这里提供帮助(免费)。无论如何,取两个较小长度的数组并在一张纸上追踪您的while 循环的结果。你会发现结果数组没有排序。当且仅当输入数组首先排序时,您编写的 while 循环才有效。我建议您阅读我之前发布的链接:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2023-03-03
  • 2021-09-16
  • 2019-09-12
  • 2018-01-17
相关资源
最近更新 更多