2010-12-16 3 views

答えて

34

RadixSortBucketSortの初期パスはまったく同じです。要素は、最も大きな数字の桁数に応じて、増分範囲(例えば、0-10,11-20、... 90-100)のbuckets(またはbins)に入れられます。

しかし、BucketSortはこれらの「バケット」を注文して1つの配列に追加します。しかし、RadixSortは、さらに並べ替えを行わずにバケットを追加し、数字の2桁目(10桁目)に基づいてバケットを「再バケット化」します。したがって、BucketSortは 'Dense'配列の方が効率的ですが、RadixSortはまばらな配列をうまく扱うことができます。

+2

この2つの方法の時間の複雑さが異なる理由を説明してください。つまり、なぜバケットソートO(n + k)ですが、基数ソートはO(nk)ですか? –

+1

@ShaunBudhramこれは古い質問ですが、これを読んでいる人が知りたいのであれば。この説明から明らかなように、バケットソートはNを1回通過し、K個のバケットをマージします(バケット内の順序は任意です)。基数ソートは各バケットに1つずつ渡されますが、ここでは文字列のソートがより良い例になると思いますので、複雑なNのKパスを行います。 –

+0

「BucketSortはこれらのバケツを注文します」とはどういう意味ですか?各バケットは別のアルゴリズムで並べ替えられていますか? 10秒ごとにグループ化すると、各バケットは完全にソートされないためです。 – mpen

14

バケットソートと基数ソートは、比較ソートではない一般的な考え方が似ているため、姉妹ソートアルゴリズムと似ています。また、両方とも実装では少し抽象的です。

基数ソート

  • 基数ベース(2進、8進、10進、等)を意味します。したがって、この並べ替えは数字用です(文字列でも使用されます)。各要素Eは、E Iがある範囲内にあるE K ... E E E 、似ている場合に動作します。 (通常0小数で0-9またはASCII文字で0-255のような塩基に)

  • それは、次いで、安定なサブソートアルゴリズムのKパスを使用して(これ安定あるいは基数ソート獲得しなければなりません数を並べ替えることができます。このサブソートアルゴリズムは、通常、ソートまたはバケットソートをカウントしますが、はそれ自体は基数ソートにはなりません。それはそれは、安定ソートアルゴリズムである(Kから0または0にkに)各パスで

  • をあらゆる数をシャッフルので

  • あなたは最上位の桁または最下位桁から開始することができます。

バケットソート:

  • それは小さなグループまたはバケットにアレイを分離し、それ自体にサブソートアルゴリズム又は再帰呼び出しを使用して個別にソートし、次いで結果を組み合わせます。たとえば、チームのバケツを追加して選手をソートし、ジャージー番号などでソートするか、1-30の範囲から1-10,11-20,21-30の3つのバケットにソートします。

  • 結合ステップは、(マージソートとは異なります)です。ちょうど基数/塩基グループ/バケットのタイプ/インスタンスかもしれ

  • (リンクされたリストの場合)元の配列に各バケットの要素をコピーするか、以前のバケツの尾部と各バケットの先頭に参加番号をソートしながら。したがって、あなたはバケツの修正インスタンスとしてMSDの基数と考えることができソート

  • バケツインプレース一種であるないけど安定ソートアルゴリズム。ただし、バケットソートの一部のバリエーションは安定していない可能性があります(安定していないサブソートアルゴリズムを使用している場合)

+0

良い比較:) –

関連する問題