私はアルゴリズム クラス プロジェクトを行っています。このプロジェクトでは、QuickSort の実装を修正して改善を提案する必要があります。これらの提案の 1 つを次に示します。配列内のピボットを選択せず、パーティション メソッドの最後のスワップを回避します。
彼がこれで何を意味しているのか正確に理解するのに苦労しています. ピボットがなければ、QuickSort のままでよいのでしょうか? これが何を意味するのかについての洞察をいただければ幸いです。これは、変更する Java コードです。
public void quickSort() {
recQuickSort(0, nElems - 1);
}
public void recQuickSort(int left, int right) {
if (left >= right)
return;
long pivot = a[right];
int mid = partition(left, right, pivot);
recQuickSort(left, mid - 1);
recQuickSort(mid + 1, right);
} // end recQuickSort()
public void swap(int dex1, int dex2) { // swap two elements
long temp = a[dex1]; // A into temp
a[dex1] = a[dex2]; // B into A
a[dex2] = temp; // temp into B
} // end swap()
public int partition(int left, int right, long pivot) {
// assuming pivot == a[right]
int leftPtr = left - 1; // left of the first element
int rightPtr = right; // position of pivot
while (true) {
while (a[++leftPtr] < pivot)
; // find bigger
while (leftPtr < rightPtr && a[--rightPtr] >= pivot)
; // find smaller
if (leftPtr >= rightPtr) // if pointers cross,
break; // partition done
else
// not crossed, so
swap(leftPtr, rightPtr); // swap elements
} // end while(true)
swap(leftPtr, right); // restore pivot
return leftPtr; // return pivot location
} // end partition()