MergeSort правая часть массива - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в 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 голосов
/ 01 июля 2018

Я не видел ничего плохого в логике. Может быть, ваш учитель попросит вас добавить это в вашу merge функцию,

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

Ваш код отлично работает с этим или без него.

...