我想知道是否有人可以帮我找出为什么我在这段代码中出现了一个Out of Bounds异常。我已经尝试了一切。 Eclipse说它发生在mergeSortRecursive和merge调用。 谢谢!递归合并排序出界异常排序
//封装方法
public static <E extends Comparable <E>> void mergeSort (E[]list){
mergeSortRecursive(list, 0, list.length-1);
}
//归并递归,取入左指针和右侧指针,其包装类表示为0和list.length -1
private static <E extends Comparable<E>> void mergeSortRecursive(E[] list, int left,
int right) {
// Base case
if (left == right) {
return;
}
int mid = left + right/2;
mergeSortRecursive(list, left, mid);
mergeSortRecursive(list, mid + 1, right);
merge(list, left, mid, mid + 1, right);
}
//合并这两个列表
public static <E extends Comparable<E>> void merge(E[] list, int leftFirst,
int leftLast, int rightFirst, int rightLast) {
@SuppressWarnings("unchecked")
E[] mergeList = (E[]) Array.newInstance(list.getClass()
.getComponentType(), rightLast - leftFirst + 1);
int rightIndex = rightFirst;
int leftIndex = leftFirst;
int index = 0;
while (leftIndex < leftLast && rightIndex < rightLast) {
if (list[leftIndex].compareTo(list[rightIndex]) < 0) {
mergeList[index] = list[leftIndex];
leftIndex++;
} else {
mergeList[index] = list[rightIndex];
rightIndex++;
}
index++;
}
while (leftIndex < leftLast) {
mergeList[index] = list[leftIndex];
index++;
leftIndex++;
}
while (rightIndex < rightLast) {
mergeList[index] = list[rightIndex];
index++;
rightIndex++;
}
for (int i = 0; i < list.length; i++) {
list[i] = mergeList[i];
}
}