これが 3 方向のクイックソートです...
private void quicksort3(int[] input, int low, int high)
{
int i = low - 1, j = high, left = low - 1, right = high, pivot = input[high], k;
if (high <= low) return;
while (true)
{
while (input[++i] < pivot) ;
while (pivot < input[--j])
if (j == low) break;
if (i >= j) break;
swap(input, i, j);
if (input[i] == pivot)
{
left++;
swap(input, left, i);
}
if (pivot == input[j]) {
right--;
swap(input, j, right);
}
}
swap(input, i, high); j = i - 1; i++;
for (k = low; k < left; k++, j--)
swap(input, k, j);
for (k = high - 1; k > right; k--, i++)
swap(input, i, k);
quicksort3(input, low, j);
quicksort3(input, i, high);
}
入力の場合、9 5 3
例外エラーIndex was outside the bounds of the array.
が発生しますpivot = input[high]
が、high の値が -1 の場合に例外が発生します (したがって、エラーが発生する理由は理解できます) が、どうすれば修正できますか?
私はそのような関数を呼び出しますquicksort3(arr,0,arr.Length-1);