ピボットをさまざまな方法で選択すると、着信arraylistの最後の要素以外のものを選択するときにスタックオーバーフローエラーが発生しました。 「中央値3」の選択では、それが最も起こっている場所です。Javaクイックソートピボット選択
public static <T> void quickSort (ArrayList<T> incomingArray, Comparator<? super T> cmp, int start, int end)
{
if(start >= end)
return;
T pivot = incomingArray.get(start + ((end - start)/2)); <--Stack overflow
if(cmp.compare(incomingArray.get(start + ((end - start)/2)), incomingArray.get(0)) < 0)
{
swap(incomingArray, (start + ((end - start)/2)), 0);
}
if(cmp.compare(incomingArray.get(end), incomingArray.get(start + ((end - start)/2))) < 0)
{
swap(incomingArray, end, (start + ((end - start)/2)));
}
if(cmp.compare(incomingArray.get((start + ((end - start)/2))), incomingArray.get(end)) < 0)
{
swap(incomingArray, 0, end);
}
swap(incomingArray, (start + ((end - start)/2)), end);
pivot = incomingArray.get(end);
int leftBound = 0;
int rightBound = end - 1;
while(leftBound < rightBound)
{
while(cmp.compare(incomingArray.get(leftBound), pivot) <= 0 && leftBound < rightBound)
leftBound++;
while(cmp.compare(incomingArray.get(rightBound), pivot) >= 0 && leftBound < rightBound)
rightBound--;
swap(incomingArray, leftBound, rightBound);
}
swap(incomingArray, rightBound, end);
quickSort(incomingArray, cmp, start, leftBound);
quickSort(incomingArray, cmp, rightBound + 1, end);
}
スワップコールは、渡された配列内のインデックス位置の値を変更するだけです。
疑問符なしで質問があります... – Snicolas
質問は、何ですか? –