MergeSort数组的右部分

时间:2018-07-01 12:29:49

标签: java mergesort

我是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 个答案:

答案 0 :(得分:1)

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

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

无论有没有此功能,您的代码都能完美地工作。