ホアレパーティションアルゴリズムが常にアレイを2つの右部分に分割する理由を理解しようとしています。以下のコードでは、私はクイックソートホアアレイアレイパーティショニング
int partition(int[] arr, int leftIndex, int rightIndex) {
int pivot = arr[(leftIndex + rightIndex)/2];
while (leftIndex <= rightIndex) {
while (arr[leftIndex] < pivot) leftIndex++;
while (arr[rightIndex] > pivot) rightIndex--;
// If all numbers at right places, than leftIndex and rightIndex
// could point at same array element index
// So it's means partion done.
// We should return leftIndex + 1 cause
// rightIndex points at the last element of the left sub array
if (leftIndex == rightIndex) return leftIndex + 1;
if (leftIndex < rightIndex) {
swap(arr, leftIndex, rightIndex);
leftIndex++;
rightIndex--;
}
}
//But here the tricky thing: Why does this "if case" never execute?
if (leftIndex - 1 > rightIndex)
System.out.println("leftIndex - 1 > rightIndex");
return leftIndex;
}
(詳細についてはコメントを参照してください)私にはそれがより明確にするためにHoare algorithm
を拡張そこで質問です:それは機能を分割するために配列を渡すことは可能ですので、以下の行が実行されます?それを実行するためには
if (leftIndex - 1 > rightIndex)
System.out.println("leftIndex - 1 > rightIndex");?