我正在做一个简单的MergeSort实现,将其形成为伪代码。我为此使用Java泛型。但是我在第一个for循环的最后一个元素上遇到了这样的异常。我已经进行了一些更改(希望更好),但是仍然不可避免地出现了这一变化。为什么会这样?
private Comparable[] mergesort(Comparable[] elements, int l, int r) {
if(l < r){
int m = (l + r - 1)/2;
mergesort(elements, l, m);
mergesort(elements, m + 1, r);
int i = l;
int j = m + 1;
int k = l;
Comparable[] elements1 = (Comparable[])new Comparable[l + r]; //changed from [l + r - 1] and in the function caller also mergesort(elements, elements.length - elements.length, elements.length - 1)
while(i <= m && j <= r){
if(elements[i].compareTo(elements[j]) <= 0 ){
elements1[k] = elements[i];
i++;
} else {
elements1[k] = elements[j];
j++;
}
k++;
}
for(int h = i; i <= m; h++){
elements[k + (h - i)] = elements[h];
//ArrayIndexOutOfBoundsException: 4(the length of the input array)
}
for(int h = j; h <= k - 1; h++){
elements[h] = elements1[h];
}
}
return elements;
}
最佳答案
虽然您的代码难以阅读,但我认为您正在比较错误的值。
for(int h = i; i <= m; h++){
^
should be h
elements[k + (h - i)] = elements[h];
//ArrayIndexOutOfBoundsException: 4(the length of the input array)
}
关于java - 带有MergeSort的数组OutOfBounds异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33629894/