当前位置: 首页 > 知识库问答 >
问题:

合并排序数组的右边部分

桂梓
2023-03-14

我是java新手,我有任务要做——mergeSort,但我有一个老师根据数组右侧提出的问题,但我不知道该怎么做。这是我的代码

public class MergeSort {
    private int[] array;
    private int[] tempArray;

    public int[] sort(int[] array) {
        this.array = array;
        this.tempArray = new int[array.length];
        mergeSort(0, array.length - 1);
        return array;
    }

    private void mergeSort(int lowerIndex, int higherIndex) {
        if (lowerIndex < higherIndex) {
            int middleIndex = lowerIndex + (higherIndex - lowerIndex) / 2;
            mergeSort(lowerIndex, middleIndex);
            mergeSort(middleIndex + 1, higherIndex);
            merge(lowerIndex, middleIndex, higherIndex);
        }
    }

    private void merge(int lowerIndex, int middleIndex, int higherIndex) {
        for (int i = lowerIndex; i <= higherIndex; i++) {
            tempArray[i] = array[i];
        }
        int i = lowerIndex;
        int j = middleIndex + 1;
        int k = lowerIndex;
        while (i <= middleIndex && j <= higherIndex) {
            if (tempArray[i] <= tempArray[j]) {
                array[k] = tempArray[i];
                i++;
            } else {
                array[k] = tempArray[j];
                j++;
            }
            k++;
        }
        while (i <= middleIndex) {
            array[k] = tempArray[i];
            k++;
            i++;
        }
    }
}

代码运行得很完美,但是,正如我前面提到的,我的老师问我:“你处理一半的合并-请注意,你还有第二个数组(右边的一个),当左边的一个为空时,可能会有元素”。

你能告诉我我在这里做错了什么吗?谢谢你的帮助。

共有1个答案

慕容博涛
2023-03-14

我没有发现逻辑有任何问题。可能是您的老师要求您将其添加到合并函数中,

while (j <= higherIndex) {
        array[k] = tempArray[j];
        k++;
        j++;
    }

无论有没有这个,你的代码都能完美工作。

 类似资料:
  • 问题是关于从16:43到23:34的视频中的合并排序http://youtu.be/M814OagXWTI?t=16m43s 在退出左/右排序合并递归后,我不清楚我们是如何合并回这些子数组的。让我们从最底部开始,当我们的元素被分成两个子数组时,一个左子数组称为B,一个右子数组称为C。在16:43左右,我们跳转到合并函数,对数组B和C进行排序,这两个数组只有8和3。合并排序函数(下面的代码)基本上通

  • 在处理接近排序的数组时,哪种算法的快速排序或合并排序性能更好?为什么?我意识到,在这种情况下,其他算法可能会比这些算法表现得更好。

  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I

  • 我的任务是用C#为二维数组创建合并排序算法。数组看起来像这样 我需要从文件中取数组并按x的升序对行进行排序,同时程序要检查是否有相同x值同时不同Y值的坐标对,当数组排序后,程序要将其写入文件中。我已经为一维数组创建了算法,但是不懂如何为二维数组重写算法,这是我的代码,请帮助我

  • 我试图实现一个递归合并排序算法来排序一个简单的整数数组,但我得到奇怪的值为索引在我的数组的后半部分。前半部分似乎排序精细,这是令人困惑的,因为它是递归实现的。随机整数数组在我的main方法中初始化。 } 这会产生以下输出: 未排序数组={15,9,12,19,49,43,57,70,78,87}对于第1轮:第一个=0中间=4最后=9第1轮中的数组={15,9、12,19、49,43、57,70、7

  • 问题是== 将nums1和nums2合并到一个按非递减顺序排序的数组中。 最终排序的数组不应由函数返回,而应存储在数组 nums1 中。为了适应这种情况,nums1 的长度为 m n,其中前 m 个元素表示应合并的元素,最后 n 个元素设置为 0 并应忽略。nums2 的长度为 n。 我的代码中有什么错误??? 您的意见 我的产出 预期产出