クイックソートの実装をテスターに渡そうとしています。しかし、私は表彰ライン昇順のクイックソート
public void quickSort(ArrayList<String> data, int firstIndex,
int numberToSort) {
if (data.size() < 16) {
insertionSort(data, firstIndex, numberToSort);
} else {
int index = partition(data, firstIndex, numberToSort);
if (firstIndex < index - 1)
quickSort(data, firstIndex, index - 1);
if (numberToSort > index)
quickSort(data, index, numberToSort);
}
}
@Override
public int partition(ArrayList<String> data, int firstIndex,
int numberToPartition) {
String pivot = data.get(firstIndex);
int left = data.indexOf(firstIndex);
int right = data.indexOf(numberToPartition);
while (left <= right) {
while (data.get(left).compareTo(pivot) < 0) // this is where I get the error
left++;
while (data.get(right).compareTo(pivot) > 0)
right--;
if (left <= right) {
temp = data.get(left);
Collections.swap(data, left, right);
data.set(right, temp);
left++;
right--;
}
}
return left;
}
上の-1配列のインデックスアウト境界の例外を取得私は自分のコードをデバッグしようとしたが、私は、エラーを修正する方法を見ていないようです。どんな助けもありがとう。
'' 'indexOf'''は何も見つからなければ-1を返します。 –
明らかに 'left'は-1 –
' right == - 1'まで 'right'を減らしているので、' data.get(right) 'は' java.lang.ArrayIndexOutOfBoundsException:-1'をスローします –