私はこの非常に奇妙な問題を抱えていましたが、その理由はわかりません。
public class QuickSort
{
private int pivLocation;
private void quickSort(Integer[] input, int low, int high)
{
if(low < high)
{
this.pivLocation = partition(input, low, high);
quickSort(input, low, pivLocation-1);
quickSort(input, pivLocation+1, high);
Inversions.comparisons += high - low;
}
}
}
private int partition(Integer[] input, int low, int high)
{
int arrLength = high - low;
if(arrLength%2 == 0){
int pivot = input[low];
}
else
{
int pivot = 1;
}
int i = low+1;
for(int j=low+1; j<= high; j++ )
{
if(input[j]< pivot)
{
swap(input, j, i);
i++;
}
}
swap(input, low, i-1);
return i-1;
}
これにより、まったく同じコードを作成する場合とは異なる比較カウントが得られますが、フィールド変数を使用する代わりに、pivLocationをローカル変数に変更します。
int pivLocation = partition(input, low, high);
理由がわかりません。