Итак, проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь запустить реализацию сортировки слиянием, но получаю сообщение об ошибке исключения, которая говорит о том, что индекс массива выходит за пределы.Это ошибка во время выполнения, потому что я могу без проблем скомпилировать программу, и она будет работать до тех пор, пока не достигнет моего вызова сортировки слиянием.Одна вещь, которую я попытался, это изменить одну из моих переменных, чтобы она соответствовала другой в методе слияния (int k = 0; // строка 39).Когда я это сделал, код запустился, однако сортированный массив слияния был неверным.Я даже попытался отладить код, но не увидел проблемы с ним.Ниже мой код:
public static void merge_sort(int A[], int l, int r){
if(l < r){
int m = (l + r)/2;
merge_sort(A, l, m);
merge_sort(A, m + 1, r);
merge(A, l, m, r);//Line17
}
}
public static void merge(int A[], int l, int m, int r){
int n1 = m - l + 1;
int n2 = r - m;
int L[] = new int [n1];
int R[] = new int [n2];
for(int i = 0; i < n1; i++){
L[i] = A[l + i];
}
for(int j = 0; j < n2; j++){
R[j] = A[m + 1 + j];
}
int i = 0;
int j = 0;
int k = 1; //line39
while(i < n1 && j < n2){
if(L[i] <= R[j]){
A[k] = L[i];
i++;
}
else{
A[k] = R[j];
j++;
}
k++;
}
while(i < n1){
A[k] = L[i];
i++;
k++;
}
while(j < n2){
A[k] = R[j]; //line60
j++;
k++;
}
}
И вот ошибка:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
at HW3.merge(HW3.java:60)
at HW3.merge_sort(HW3.java:17)
at HW3.main(HW3.java:160) //this line is where I call the method within the main
Я понимаю, что это означает, что массив выходит из установленного размера 15, но я не уверено том, как исправить эту проблему.Я пытался смотреть на подобные проблемы, но я не видел решения проблемы, с которой я столкнулся.