我目前正在編寫快速排序算法的修改版本,即使我的ArrayList輸入中包含元素,我也會得到索引超出範圍異常。編寫QuickSort算法時出現索引超出範圍
希望有人能告訴我,我要去哪裏錯了...
以下是錯誤代碼:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index:
4, Size: 4 at java.util.ArrayList.rangeCheck(ArrayList.java:635) at> java.util.ArrayList.get(ArrayList.java:411) at
Lab4.quickSort(Lab4.java:36) at Lab4.main(Lab4.java:113)
這是我目前使用的代碼:
public void quickSort(ArrayList<Integer> S){
if(S.size() <= 1) return;
int middle = (S.size() - 1)/2;
int pivot = S.get(middle);
ArrayList<Integer> L = new ArrayList<Integer>(); //less
ArrayList<Integer> E = new ArrayList<Integer>(); //equal
ArrayList<Integer> G = new ArrayList<Integer>(); //greater
int i = 0;
while(!S.isEmpty()) {
int next = S.get(i);
if(next == pivot) E.add(next);
else if(next > pivot) G.add(next);
else if(next < pivot) L.add(next);
i++;
}
quickSort(L);
quickSort(G);
S.addAll(L);
S.addAll(E);
S.addAll(G);
}
我目前用來測試這個方法的ArrayList如下(想想你可能也需要這個部分):
ArrayList<Integer> arr2 = new ArrayList<Integer>();
arr2.add(3);
arr2.add(1);
arr2.add(6);
arr2.add(5);
sort.quickSort(arr2);
System.out.println("\n\nQuickSort (should be sorted): ");
printIntArrayList(arr2);
正如您從堆棧跟蹤中看到的,問題出現在文件Lab4.java的第36行。您訪問列表末尾以外的元素。 – Henry 2015-02-07 14:38:15