我正在嘗試爲合併進行合併排序的迭代版本。我從網站上獲得了合併排序方法,並且我研究了應該合併數組的方法。但是我不斷收到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