私は、適切なピボット要素を選択するためのSelectアルゴリズムに基づくクイックソートバリアントの実装に取り組んでいます。従来の知識では、配列を5要素のブロックに分割し、それぞれの中央値を取得してから、結果の中央値に同じブロッキングアプローチを再帰的に適用して、「中央値の中央値」を取得するようです。
私を混乱させているのは、3要素ブロックではなく5要素ブロックを選択していることです。5要素のブロックでは、5の中央値の操作を実行するように見えますがn/4 = n/5 + n/25 + n/125 + n/625 + ...
、3要素のブロックでは、3のn/2 = n/3 + n/9 + n/27 + n/81 + ...
中央値の操作を実行します。各中央値5は6回の比較であり、各中央値3は2回の比較であるため、3*n/2
中央値5を使用した比較と、n
中央値3を使用した比較になります。
誰かがこの不一致を説明できますか、そして5要素ブロックを使用する動機は何でしょうか?私はこれらのアルゴリズムを適用するための通常の方法に精通していないので、いくつかのステップを切り取って、中央値に「十分に近づけて」適切なピボットを確保する方法があるかもしれません。そのアプローチは5要素ブロックでより適切に機能します。 ?