我想知道是否有人可以幫我找出爲什麼我在這段代碼中出現了一個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];
}
}