我正在尝试为合并进行合并排序的迭代版本。我从网站上获得了合并排序方法,并且我研究了应该合并数组的方法。但是我不断收到IndexOutOfBounds异常。迭代Java合并排序
我一直在这个工作多个小时,我找不到错误。有人可以帮我找到解决办法吗?
到目前为止,我有这样的:
public static void MergeSort(int[] array) {
int current;
int leftStart;
int arraySize = array.length - 1;
for (current = 1; current <= arraySize; current = 2 * current) {
for (leftStart = 0; leftStart <= arraySize; leftStart += 2 * current) {
int mid = leftStart + current - 1;
int right = getMin(leftStart + 2 * current - 1, arraySize);
mergeArray(array, leftStart, mid, right);
}
}
}
public static void mergeArray(int[] array, int left, int mid, int right) {
int leftArraySize = mid - left + 1;
int rightArraySize = right - mid;
int[] leftArray = new int[leftArraySize];
int[] rightArray = new int[rightArraySize];
for (int i = 0; i < leftArraySize; i++)
leftArray[i] = array[left + i];
for (int i = 0; i < rightArraySize; i++)
rightArray[i] = array[mid + 1 + i];
int leftPtr = 0;
int rightPtr = 0;
int tempPtr = leftPtr;
while (leftPtr < leftArraySize && rightPtr < rightArraySize) {
if (leftArray[leftPtr] <= rightArray[rightPtr])
array[tempPtr++] = leftArray[leftPtr++];
else
array[tempPtr++] = rightArray[rightPtr++];
}
while (leftPtr <= left)
array[tempPtr++] = leftArray[leftPtr++];
while (rightPtr < right)
array[tempPtr++] = rightArray[rightPtr++];
}
public static int getMin(int left, int right) {
if (left <= right) {
return left;
} else {
return right;
}
}
任何形式的帮助将不胜感激!
谢谢!
您应该开始告诉我们错误的确切位置。这很容易实现,因为您知道这是一个无界限错误,您可以简单地在可能发生此类错误的所有点上使用调试器或系统消息。这是你的工作,而不是我们的。 – Aziuth
尝试一步一步理解算法和调试代码。 – shawn