ピボットに基づいてパーティションを分割する簡単な実装を書いています。簡単にするために、配列内の最初の要素をピボット要素とします。以下は、私は以下の配列のために今 ピボットに基づいたパーティション配列
public static void partitionOnPivot(int[] a , int lo , int hi)
{
int pivot = lo;
while (lo < hi)
{
while(a[lo] <= a[pivot]) lo++;
while(a[hi] > a[pivot]) hi--;
if(lo < hi) //we are already done with these cases
{
ArrayUtil.swap(a, lo++, hi--);
}
}
ArrayUtil.swap(a, pivot, lo);
}
を書いたコード、一点で
{26,84,98,45}
が交換され、この点26で、インデックス1
に立つ、両方lo
とhi
です84となり、出力は{84, 26, 98, 45}
になります。 26は放置されていたはずです。
私はかなりの時間をかけて進歩なしにいくつかの変更を行っています。このコーナーケースはどうやって処理しますか?プログラムにバグはありますか?
ピボットを増分しますか? – user2434
申し訳ありませんが、私は怒っています - 私の答えをディスカウントします。 – mcfinnigan