Bentley-Mcilroyによって設計された3方向のパーティショニングアルゴリズムがあります。これは、次のように実行されます(最初の要素に基づいてパーティショニングします。最初はi = p = 0
およびj = q = n-1
):
Scan i from left to right so long as a[i] < a[lo].
Scan j from right to left so long as a[j] > a[lo].
Exchange a[i] with a[j].
If a[i] == a[lo], exchange a[i] with a[p] and increment p.
If a[j] == a[lo], exchange a[j] with a[q] and decrement q.
これは。まで続きi <= j
ます。これが壊れたら、
Scan j and p from right to left and exchange a[j] with a[p].
Scan i and q from left to right and exchange a[i] with a[q].
ここで、最初の要素について分割する代わりに、整数などの外部要素に基づいて分割できるように変更しますpivot
(pivot
配列内の要素の1つと同じである可能性があり、最初の要素である可能性があります) 1つも!)。これどうやってするの?p
0ではなく-1に設定してみましたが、動作しませんでした。