現在クイックソートを勉強している学生です。
クイックソートのピボットの決め方について質問があります。
最良と最悪が下記二つであることはわかりました
理想は配列の中央値で均等に分割すること
ー>要素数が多い場合そもそも中央値を求めるのに時間がかかるから×
計算量n^2となる最悪な選び方
ー>配列の最大値or最小値を常に選び続ける
自分なりに調べた結果下記の三つのやり方がよくつかわれることがわかりました
①ランダム
②複数サンプルとり、その中央値
③先頭二つの要素をとり、大きい方を選ぶ(同じ場合は次の要素と比較)
個人的には②>③>①な気がするのですがどうでしょうか
ちなみに、私が考えるそれぞれのメリット・考え方は
①②も③も最小値や最大値を引く可能性があるなら余計な計算など瀬津にランダムでいいという考え
②複数サンプルのうちの中央値を選択するので、最小値や、最大値を選択する可能性が低い、かつ③より中央に近い値を取りやすい
③配列の要素がほぼすべて同じでない限り最大値や最小値を引く可能性が低い
それぞれ、ほかに方法があったりするのでしょうか?
解答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー