クイック セレクト アルゴリズムの理解に問題があります。私はそれがクイックソートアルゴリズム(私がよく知っている)に基づいていることを知っており、おそらく配列の一部をソートせずに残して必要な結果が得られることを知っています。問題は、次の配列から 2 番目に小さい要素を見つけることです。
int a[4] = {1,3,5,2} ;
ここで、ピボットをランダムに選択するとします。この投稿によると、次の条件があります。
k == pivot
. 次に、すでに k 番目に小さいことがわかりました。これは、パーティションの動作方法が原因です。k 番目の要素よりも小さい要素がちょうど k - 1 個あります。k < pivot
. 次に、k 番目に小さいものがピボットの左側にあります。k > pivot
. 次に、k 番目に小さいものがピボットの右側にあります。そして、それを見つけるには、実際に右側の k-pivot 最小数を見つける必要があります。
k==pivot
k番目(私の場合は2番目に小さい要素)を見つけたことを誰かがどのように意味するかを説明できれば幸いです。またk < pivot
、ピボットの左側に対してプロセスを繰り返す場合は?