クイックソートの考え方?
そこで、クイックソートのアルゴリズムで躓いています。
10,20,11,19,13,17,14,16,15
真中の値 13 を基準値として使う。
左から基準値と比較してより大きい値は 20。
右から基準値と比較して20 の手前までのより小さい値11。
両者を置換。
10,11,20,19,13,17,14,16,15
真中の値 13 を基準値として使って比較。
左から基準値と比較してより大きい値は 20。
右から基準値と比較して20 の手前までのより小さい値はない。
基準値と20とを置換。
10,11,13,19,20,17,14,16,15
真中の値 20 を基準値として使って比較。
左から基準値と比較してより大きい値はない。
右から基準値と比較してより小さい値は15。
両者を置換。
10,11,13,19,15,17,14,16,20
真中の値 15 を基準値として使って比較。
左から基準値と比較してより大きい値は19。
右から基準値と比較してより小さい値は14。
両者を置換。
10,11,13,14,15,17,19,16,20
真中の値 15 を基準値として使って比較。
左から基準値と比較してより大きい値はない。
右から基準値と比較してより小さい値はない。
これで15が真中と確定。
この後は、「同じ過程を再帰的に二つのサブセットに適用」するのは同じ。
これは、単に、クイックソートの処理手順を追えばわかる話です。
問題は、「なぜ、『右から基準値と比較して20 の手前まで』なのだ?」ということ。
そうでないと、「堂々巡りに陥るからだ!」というのはわかります。
が、私の理解はそこで立ち往生したままです。
還暦を迎えた私の頭は、オーバーヒート気味。
「そこは、このように考えたらよい」という回答をお願いします。
※自らの理解力と理解度の問題で質問するのは非常に恐縮。
※しかし、後一歩の理解の壁を超えたいので質問します。
お礼
回答頂きありがとうございます! とても分かりやすい説明でした。 >TECHSCORE の絵でいうと, 2番の 21 という値を削除するときにその下の 5番と 6番だけをヒープとして作り直してもダメだよね. 確かにそうでした、ヒープは葉まですべて詰まっていなければ いけませんもんね! >「取り出し」と同じように, 当該ノードを「末端の最も右の値」と交換してからヒープを作り直すのが自然かな. 了解致しました! お助けいただき、本当にありがとうございました。