Я новичок в 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++;
}
}
}
Код работает отлично, но, как я упоминал ранее, мой учитель спросил меня: «Вы обрабатываете половину слияния - обратите внимание, что у вас также есть второй массив (справа), и могут быть элементы, когда слева пуст ".
Подскажите, пожалуйста, что я здесь не так делаю? Спасибо за вашу помощь.