課題のマージソートの反復バージョンを作成しようとしています。私は、WebサイトからMergeソートメソッドを取得し、配列をマージするはずのメソッドに取り組みました。しかし、私は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