Я создаю программу Java, в которой реализую алгоритм MergeSort. Мой код следующий (пока):
public void merge(Integer [] left, Integer[] right, Integer[] a) {
int i = 0; // a[] index (A)
int lIndex = 0; // left[] index (B)
int rIndex = 0; // right[] index (C)
// Begin main merge process
while((lIndex < left.length) && (rIndex < right.length)) {
if(left[lIndex] <= right[rIndex]) {
a[i] = left[lIndex]; // Store it
lIndex++; // Increase index of left[]
}
else {
a[i] = right[rIndex]; // Store it
rIndex++; // Increase index of right[]
}
i++; // Increase index of a[]
}
if(i == lIndex) { // If the left array is sorted
while(rIndex < right.length) { // Copy the contents of rhe right array to a[]
a[i] = right[rIndex];
i++;
rIndex++;
}
}
else { // If the right array is sorted
while(lIndex < left.length) { // Copy the contents of the left array to a[]
a[i] = left[lIndex];
i++;
lIndex++;
}
}
}
Проблема в том, что каждый раз, когда я выполняю функцию, входной массив возвращается частично отсортированным. Я имею в виду, что большинство элементов находятся на своем правильном месте, но есть один или два, которые расположены неправильно, а также пара других, которые являются дубликатами других элементов! Поскольку я не вижу, в чем на самом деле проблема, может ли кто-нибудь помочь мне? Реализация представляет собой мини-проект для урока, и я не могу использовать int[ ] (допустим) вместо Integer[ ], чтобы скопировать содержимое массива A[ ] методом Arrays.copyOf(). Заранее спасибо и прошу простить мои синтаксические/орфографические ошибки.
Обратите внимание, что входной массив всегда является степенью 2 (2, 4, 8, 16 и т. д.), поэтому каждый раз, когда я делю на 2, чтобы найти индекс среднего элемента, я всегда получаю четное число.