我是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++;
}
}
}
代码运行良好,但是,正如我之前提到的,我的老师问我:“您正在处理合并的一半-请注意,您还有第二个数组(右边的一个),当左边的一个数组时可能会有一些元素为空”。
您能告诉我我在做什么错吗?感谢您的帮助。
答案 0 :(得分:1)
我没有发现逻辑有什么问题。可能是您的老师要求您将其添加到您的merge
函数中,
while (j <= higherIndex) {
array[k] = tempArray[j];
k++;
j++;
}
无论有没有此功能,您的代码都能完美地工作。