• ベストアンサー

それぞれのソート方法の特徴の違いについて

ソートを勉強しているのですが、 ヒープソートや、クイックソートなど効率の良いやり方と、 バブルソートのように、そうでないものがあるらしいことを 知ったのですが、最強のアルゴリズムは存在するのですか? それとも、ソート対象の状況によって、有効なアルゴリズムが違ってくるのですか? もし違うとしたら、どのように違うのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.4

>ところで、IOとは何でしょうか。 すいません。これは、I/O と書くべきでした。 つまり、ソートの対象が比較的大きい場合、最初からディスクアクセスを前提としたり、スワップが発生する可能性がある事を考慮する事もあると言いたかったのですが、ちょっと余計な事でした。

その他の回答 (3)

noname#30727
noname#30727
回答No.3

大抵のアルゴリズムの速度はデータの交換(移動)回数に比例します。それぞれのアルゴリズムの平均交換回数や最大交換回数になるソート対象の状態を考慮して使い分ける事になると思います。あらゆる条件で交換回数が最小になるアルゴリズムはありません。IOが発生するならば、さらに複雑になります。 例えば、1000個のランダムに並んだデータをソートさせる場合と、900個のソートされたデータに100個のランダムに並んだデータを追加してソートさせる場合では、選択するアルゴリズムが変わってくるような気がしませんか?

accessdb_user
質問者

補足

どうもありがとうございます。1000個のランダムに並んだデータをソートさせる場合と、900個のソートされたデータに100個のランダムに並んだデータを追加してソートさせる場合、という論点と同様なことを私も想像していました。アクセスのオートナンバがところどころだけ、乱れてしまっている場合とか・・。 ところで、IOとは何でしょうか。

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

用途によりますので、最強は存在しないといっていいと思います。 速度とメモリの使用量だけでなく、他にも見当すべき項目はあります。 例えば、マージソートというメモリの乗らないサイズの出たを高速にソートするというものもあります。 また、速度も条件によって変化します。 例えばヒープソートはどういうデータが入力であっても安定した速度が出ますが、 クイックソートは入力のデータの並びによっては、 極端に性能がおちます。 また、データ数が極端に少ない場合は、アルゴリズムが複雑なヒープソート、クイックソートは単純なアルゴリズムのソートに速度でまけますし、 つくるのも面倒です(^^; 他にもいろいろありますが、結局は入力のデータの量や、性質、必要とする速度、手間等で 最適なソートは異なります。

accessdb_user
質問者

お礼

ありがとうございます。とてもためになりました。 昔ヒープソートやクイックソートを習ったのですが、今では、わかりません。 要素が少なかったら、バブルソートの方がいいのですね。 今、バブルソートしかかけないので、安心しました。

回答No.1

「アルゴリズ○とデータ構造」 近藤嘉○ SOFTBA○K という本に、わかりやすく解説してありますよ。 本の内容を書いたら、著作権の侵害になるので説明できませんが、使用するソートを選ぶときは、「時間(ソートの速さ)と空間(メモリの使用量)のトレードオフ(どっちをとるか)」です。

accessdb_user
質問者

お礼

本のご紹介ありがとうございます。今度読みたいです。 メモリの使用量による選択もあるのだとは知りませんでした。 どうもありがとうございました。

関連するQ&A

  • クイックソートとヒープソートの違いは

    クイックソートとヒープソートの違いは何でしょうか?教えて下さい。

  • バブルソートとクイックソート

    まだソートについて勉強し始めたばかりですが バブルソートは対象の総数が増えるとそれに伴い比較回数は増加するのに対し クイックソートはそれほど増加しないのはなぜでしょうか?? 検索してみてもプログラムが書いてあってよくわからないので... 根本的なところなのでしょうがどなたか教えてください!

  • 文字列をソートする方法

    数値をソートする方法にはバブルソートやクイックソートなどがあり アルゴリズムは分かるのですが 文字列を五十音順にソートしたい場合にはどのようにしたら良いですか? 検索をかけてみたのですが、大抵プログラミング言語に備わったsortの方法が紹介されており 自分で処理を行う方法については書かれていません。 ExcelのSort機能を使わない方法で教えてください。

  • 挿入ソートとバブルソート

    挿入ソートとバブルソートについて教えてください。どのようなアルゴリズムでソートされるのでしょうか?

  • クイックソートって??

    どこに載せればいいのかわからなかったので ここに載せてみました。 クイックソートってなんですか?? 簡単なアルゴリズムで答えてください!?   (自分も何言っているのかわらない??) 簡単に言えばクイックソートってナに??  です。 よろしくお願いします。 わかるように簡単でね!!

  • クイックソートのアルゴリズムについて

    (1)クイックソートが使われるのは実際にはどのような場面なのでしょうか?メインメモリで使われていると聞きましたが‥ (2)クイックソートが一番早いと聞きましたがコームソートやバブルソートなどは使われないのでしょうか? (3)マージソートはどのような局面で使われるのでしょうか?

  • アルゴリズムの問題なのですが、マージソートとクイックソートについて教え

    アルゴリズムの問題なのですが、マージソートとクイックソートについて教えてください。 数列の(21 99 38 22 15 6)をマージソートで並び変えて、クイックソートでも並び変えたいのです。 マージソートで並び変えた手順は (21 99 38 22 15 6) (下矢印) (21 99 38)(22 15 6) (下矢印) (21 99)(38)(22 15)(6) (下矢印) (21)(99)(38)(22)(15)(6) (下矢印) (21 99)(38)(15 22)(6) (下矢印) (21 38 99)(6 15 22) (下矢印) (6 15 21 22 38 99) となりました。 この時、分割回数と統合回数がともに5なのですが、どう見たら5回なのでしょうか。 分割回数は3で統合回数も3ではないのでしょうか? クイックソートの方なのですが、 回答は (21 99 38 22 15 6) (下矢印) (15 6)(21)(99 38 22) (下矢印) (6)(15)(21)(22 38)(99) (15と38にした場合) (下矢印) (6)(15)(21)(22)(38)(99) となっていて、 最も効率のよいピボットを選択した場合分割回数は3となっています。 私がやってみたところ (21 99 38 22 15 6) (下矢印) (15 6)(21)(99 38 22) (下矢印) (6)(15)(21)(22)(38)(99)  (15と38を選んだ) これではいけないのでしょうか。 長くなりましたが、よろしくお願いします。

  • クイックソート

    クイックソートのアルゴリズムの問題で 9 1 8 5 3 4 2 6 7 と上記のようなデータ列を昇順に整列するときに 9 1 8 5 3 4 2 6 7 6 1 8 5 3 4 2 9 7 6 1 2 5 3 4 8 9 7 とここで詰まってしまうんですけどどうしたら昇順に導けますか?

  • クイックソート

    N個のデータを降順に並び替えるプログラムをクイックソートで書きたいのですがよく分かりません。アルゴリズムの部分をどなたか教えてください。できれば詳しい説明もお願いします。

  • ソート(データの並べ替え)の逆概念はシャッフル?

    ソートは、データの集合を一定の規則に従って並べること。 バブルソート、シェーカーソート、コムソート、選択ソート、 挿入ソート、シェルソート、ヒープソート、マージソート、 クイックソート、バケットソート、基数ソート、 逆写像ソート、ボゴソート、奇偶転置ソート、シェアソート などがあるそうです。 ではその逆概念の、データの集合を一定の規則に従ってバラバラにすることってなんといいますか? トランプ(カードマジック)でよく見かけるシャッフルのことでしょうか? ディールシャッフル、ヒンズーシャッフル、オーバーハンドシャッフル、リフルシャッフル、ファローシャッフル などがあるそうです。 それらを数学的に扱ったものってありますか?

専門家に質問してみよう