這個名單是我寫到目前爲止代碼:索引出界異常的快速排序泛型
import java.util.Collections;
import java.util.Random;
import java.util.List;
public class Sorter<T extends Comparable<T>> {
public void sort(List<T> list) {
if (list.size() <= 10) {
insertionSort(list, 0, list.size());
} else {
quickSort(list, 0, list.size() - 1);
}
}
private void quickSort(List<T> list, int leftIndex, int rightIndex) {
int i = leftIndex;
int j = rightIndex;
if (i >= j) {
return;
} else if (j - i <= 10) {
insertionSort(list, i, j+1);
return;
}
int rand = randomizePivot(j, i);
T pivot = list.get(rand);
Collections.swap(list, rand, j);
while (i < j) {
while (!list.get(i).compareTo(pivot) && i < j) {
i++;
}
while (!pivot.compareTo(list.get(j)) && i < j) {
j--;
}
if (i < j) {
Collections.swap(list, i, j);
}
}
list.remove(rightIndex);
list.add(rightIndex, list.get(j));
list.remove(j);
list.add(j, pivot);
quickSort(list, leftIndex, i - 1);
quickSort(list, j + 1, rightIndex);
}
private int randomizePivot(int hi, int lo) {
Random rand = new Random();
return rand.nextInt(hi - lo + 1) + lo;
}
private void insertionSort(List<T> list, int lo, int hi) {
for (int i = lo + 1; i < hi; i++) {
int j = i - 1;
T elem = list.get(i);
while (j >= lo && list.get(j).compareTo(elem)) {
list.remove(j + 1);
list.add(j + 1, list.get(j));
j--;
}
list.remove(j + 1);
list.add(j + 1, elem);
}
}
}
它「作品」九OT十名。有時,它給了我拋出IndexOutOfBoundsException在這一行:
list.add(rightIndex, list.get(j));
這就是支點找到其確切位置的零件。確切的錯誤消息,在25項目的列表是:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 24, Size: 24
at java.util.LinkedList.checkElementIndex(Unknown Source)
at java.util.LinkedList.get(Unknown Source)
任何人都可以幫忙嗎?錯誤在哪裏?
是的,問題在那裏,正如我在評論回覆中指出的那樣。無論如何,謝謝:) – Goet
@ Goet - 很好有這個固定的。有時純邏輯比調試器更強大。隨時提供有用的答案,它也會增加你自己的聲譽。 – Ingo