配列に存在するピボット要素に依存しないインプレース パーティショニングアルゴリズム (Quicksort 実装で使用される種類の)はありますか?
つまり、配列要素は次の順序で配置する必要があります。
- ピボットよりも小さい要素 (存在する場合)
- ピボットに等しい要素 (存在する場合)
- ピボットより大きい要素 (存在する場合)
ピボット要素が配列に存在する場合は (並べ替え後に) インデックスを返す必要があり、そうでない場合は特別な値を返す必要があります。これは、順序を維持するために要素を挿入できるインデックスの1 の補数である可能性があります (Java の標準のバイナリ検索関数の戻り値のように)。
私が見た実装では、ピボット要素のインデックスをパラメーターとして指定する必要があります (または常に配列の先頭にある必要があります)。残念ながら、ピボットが配列内に存在するかどうか (または配列のどこにあるか) は事前にわかりません。配列にあります。)
編集(メリットンのコメントへの返信):次の条件のいずれかが当てはまると想定することもできます。
- 配列の長さが < 2、または
- 少なくとも 1 つの要素が <= ピボットで、少なくとも 1 つの要素が >= ピボットです。
配列内に値が重複している可能性があります (ピボット値の重複を含む)。