
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
クイックソートよりマージソートが良い理由なら最悪時の演算量です。
クイックソートとマージソートはどちらも平均演算量はO(n log n)ですが、最悪時の演算量はクイックソートはO(n^2)なのに対してマージソートは平均と同じくO(n log n)だからです。ただし演算量オーダーは同じですが実際はクイックソートの方が倍くらい速いと言われます。またオンメモリ動作をさせるときのメモリ使用量もマージソートはクイックソートの倍必要になります。一方でマージソートのアクセスは順序的なのでオンメモリに乗らずテープなどの順序アクセスメモリで動作させるときはマージソートが有効です。
# 昔の大型計算機なんかではオンメモリではできなかったのでマージソートが使われた
なお学籍番号の場合だと非比較ソート(基数ソートとかバケットソート)の方がクイックソートより速いかもしれません。
No.6
- 回答日時:
オンコアで「学生のデータベースを学籍番号においてソートする」という前提ならほかのソートアルゴリズムを検討してもいいんじゃないかなっ
て思う. 特に「学籍番号が重複しない」という前提では.No.5
- 回答日時:
どうでしょう、
予断に なるかも、
知れませんが。
ソート選択より、
データ構造こそが 負荷に、
大きく 関与すると、
思いますよ。
何故なら、
どの ソートでも、
自作するなら、
アルゴリズムと しては、
研究され尽くしており、
割と 速度差は、
ないものと 思いますし。
元より、
速度差等を 気にするなら、
チューニングが 施された、
インクルードファイル内かな、
其の ソートが、
大凡 最速ですし。
当たり前に、
事故も、速度負荷も、
ハード上に 起因すると、
思うからです。
所で、
速度は 主に、
ハード負荷量起因ですし、
リスクも 同じでから、
移動させる データ量に、
帰結すると 思います。
ですから、
学生番号を key値に、
するなら、
データ構造を 工夫して、
学籍番号データと 他データ実体参照と、
ワンパックにして 定義して、
並び直し 移動される、
データ量を 抑えて、
安定化と、高速化を、
図りますよね。
更に、
余談ですが 自作するなら、
アルゴリズムは 二分木の、
変形が 好みですね。
No.4
- 回答日時:
安定か不安定かはあまり問題になりません。
クイックソートが偶然遅くなる確率は、データが増えると天文学的に
小さくなるからです。保険として、ソ―ト前にランダマイズをかけておけば
安定性は無視して構いません。
クイックとマージの本質的な違いは
ランダムアクセスとシーケンシャルアクセスです。
ランダムアクセスが高速な媒体上のデータではクイックが有利
シーケンシャルアクセスがの方が速い、あるいはシーケンシャルアクセス
しか出来ない媒体ではマ―ジの方が有理です。
従って、全データをメモリにのせて処理して良いならクイック
HDDからデータを読みながら、メモリを余り使わずソートしたいならマージ
ということになります。
蛇足ですが、私ならソートはデータベースに任せます(SQLにorder by書くだけ)(^_^;)
No.3
- 回答日時:
安定ソートの意味はご存知ですね?
では、なぜ「安定ソートの方がよい」と考えたのでしょうか?
「安定」という言葉の印象に引っぱられてないですか?
比較に使う値が等しかった場合、並び換え前の順位が残ることが保証されるのが「安全ソート」です。
例えば
行番号 得点 名前
--------
1 90 田中
....
15 90 佐藤
....
というデータを得点順にソートすることを考えます。
このとき、上記の 90点 が等しい値になります。
このとき、元の並び順が保存されて
1 90 田中
15 90 佐藤
となることが保証されているのが安定ソートです。
安定ソートとそうでないソートとで違いが出るのは「等しい値が複数あるとき」です。
全ての値が異なれば、どちらでも同じ結果になります。
どんなデータなのかをよく考えてみましょう。
○ 元のデータベースは整列済みなのですか?
整列できてないデータを安定ソートで並び変えても「安定」である意味がありません。
○同じ「学籍番号」のデータが複数あるのですか?
例えば「日付別出席記録」なら、日付と学籍番号の組になっていて、一つの学籍番号に複数の日付が対応しているでしょう
「学生名簿」なら、重複しているのは変です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(パソコン・スマホ・電化製品) 挿入ソートとマージソートを比較すると,挿入ソートのほうが計算量は少なく,効率的なアルゴリズムである。 1 2022/11/30 17:31
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- Excel(エクセル) excel マクロでグループ内でソートしたい。見出しが上手くいきません。 7 2022/05/22 08:31
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Excel(エクセル) エクセルのソート方法について 1 2023/01/13 00:01
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- その他(プログラミング・Web制作) sortの優先キーについて(スプレッドシート) 1 2023/01/17 17:59
- Windows 10 Win 10エクスプローラーについて、ファイル名変更後即座に移動してしまう 対策は? 8 2023/08/16 03:49
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# DataGridView のヘッダーセ...
-
配列の問題
-
System.IO.Directory.GetFiles...
-
構造体配列の並べ替え
-
C言語のCSV形式からのソート
-
10個の整数を入力して小さい順...
-
100万個の整数のソート
-
偶数奇数の判別!!
-
C言語・要素除去
-
listboxの並び替え
-
VB.NETでファイル名順にファイ...
-
構造体のソートに関して
-
DataGridViewのソートを止めたい
-
C++ 入力した3つのint型の整数...
-
javaのソートについて。
-
文字列をソートする方法
-
DataGridViewの複数列を連動し...
-
VBA基本構文の作り方 2列の...
-
C言語 配列の長さの上限
-
関数から配列を返すには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VBA基本構文の作り方 2列の...
-
C言語・要素除去
-
C# DataTableの行をソートしてD...
-
VB.NETでファイル名順にファイ...
-
構造体配列の並べ替え
-
あるディレクトリ内のファイル...
-
配列の問題
-
10個の整数を入力して小さい順...
-
2次元配列を複数項目でソートし...
-
構造体のリストをソートしたい。
-
DataGridViewソート時に先頭行...
-
DataGridViewのソートを止めたい
-
datagridviewの並べ替え
-
C++ 入力した3つのint型の整数...
-
DataGridViewの複数列を連動し...
-
Excelですべての組合せ(重複組...
-
C#のリストボックスで、クリッ...
-
VBScriptで重複レコードを削除...
おすすめ情報
ありがとうございます。ただ、今回はアルゴリズムの問題として学籍番号に基づくソートでクイックソートを用いるのは反対か賛成というふうに聞かれていて、どちらかを答えなければならないようになっています。
kmeeさん、ありがとうございます。学籍番号に関しては重複はないと思います。また、元のデータベースがソート済みなのかは問題に書かれていなく、ただ学生のデータベースを学籍番号においてソートする手段として、クイックソートは賛成か、反対なのかという問題です。