我目前正在编写快速排序算法的修改版本,即使我的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