運行代碼它顯示IndexOutBoundException
我不知道它爲什麼會發生。這與合併函數有關。有人可以指出合併函數中的錯誤
public class MergeSort {
public static <T extends Comparable<T>> void sort(List<T> lst) {
System.out.println(lst.size());
mergeSort(lst, 0, lst.size() - 1);
}
private static <T extends Comparable<T>> void mergeSort(List<T> l, int low,int high) {
if (low < high) {
int mid = low +((high-low)/2);
mergeSort(l, low, mid);
mergeSort(l, mid + 1, high);
merge(l, low, high, mid);
}
}
private static <T extends Comparable<T>> void merge(List<T> lst, int low,int high, int mid) {
List<T> temp = new ArrayList<T>();
for (int i = low; i <= high; i++) {
System.out.println(lst.get(i));
temp.add(i,lst.get(i));
}
System.out.println();
int i = low;
int j = mid + 1;
int k = low;
while (i <= mid && j <= high) {
if ((temp.get(i)).compareTo(temp.get(j)) <= 0) {
lst.set(k, temp.get(i));
i++;
} else {
lst.set(k, temp.get(j));
j++;
}
k++;
}
while (i <= mid || j <= high) {
if (i <= mid) {
lst.set(k, temp.get(i));
k++;
i++;
} else if (j <= high) {
lst.set(k, temp.get(j));
k++;
j++;
}
}
for(T e:lst){
System.out.print(e+ " ");
}
System.out.println();
}
錯誤是:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 0
at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:643)
at java.util.ArrayList.add(ArrayList.java:455)
MergeSort.merge(MergeSort.java:34)
MergeSort.mergeSort(MergeSort.java:22)
MergeSort.mergeSort(MergeSort.java:21)
MergeSort.mergeSort(MergeSort.java:20)
MergeSort.sort(MergeSort.java:11)
Main.main(Main.java:65)