このソートの存在意義は、実装がとにかく簡単ってことと、前提知識なしに誰でも思いつくソートであること。挿入ソートデータを適切な位置に挿入していくソート。普段は遅いけど、ほぼ整列済のデータに対しては数あるソートの中でも最も高速になることがある。この特性が挿入ソートの存在意義。クイックソートで大体並んで来たら挿入ソートに切り替えると高速になるそうだ。バブルソート隣どうしのデータを比較して交換するソート。このソートの存在意義は、直観的に理解できることと実装が簡単であることだ。自前ソートの機会が減ってるとはいえプログラマを自認するならバブルソートくらいは書けないとね。クイックソート名前どおり高速なソート。このソートの存在意義はとにかく速いことだが、アルゴリズムは少し複雑になる。常に最速かというとそんなことはなく、データの特性によってはすこぶる遅くなる。シェルソート改良版の挿入ソート。高速なソートで、データの特性によって並はずれて遅くなるということもない。比較するデータの間隔のチューニングが難しい。ヒープソート配列を木構造に見立てたソート。このソートもかなり高速で、データの特性によって並はずれて遅くなるということもない。マージソートデータを分割して分割して分割してこれ以上分割できなくなったところで統合して統合して統合してという順でソートしていく。統合時にソートされる。このソートは比較的メモリ使用量が大きいけれどかなり高速である。加えて重要なのは安定ソートであるということ。安定ソートとは、たとえば氏名で並び替えた後に都道府県で並び替えると、各都道府県データのなかでは氏名順の並びをキープしているようなソートのこと。クイックソート、シェルソート、ヒープソートなどの他の高速ソートは不安定ソートなので、都道府県順で並び替えると氏名の順はぐちゃっとなってしまうけど、マージソートは崩れない。他の安定ソートとしてはバブルソート、挿入ソートがある。高速かつ安定ソートで、さらにデータの並び順で速度が変わることがないと三拍子そろった個人的には最強ではないかと思うソート。まあクイックソートほど速くはないし、メモリを食うソートなのでこれもケースバイケース。並びに依存しないと四拍子そろった最強のソートがあればこんなにたくさんソートを覚える必要がなかったかもしれないが、逆にいえばこの多様性こそがプログラミングの学習において重要であるともいえる。「並び替え」というひとつの課題でこれだけ多彩な回答が存在するというのは、自分が作ったプログラムに対してもより良い方法があるのではないかという考察のきっかけになる。今回取り上げたソートはすべて基本情報の出題範囲であるが、それぞれに長所・短所があって面白い。最後にこの記事の執筆のきっかけになったサイトを紹介する。www.toptal.comこれを見て、シェルソートはやっ!!まじで!?と思ったのがきっかけ。このソートは完全にノーマークだった。中級者を悩ませるプロシージャ分割をマスターする極意タイトルで大きく出てしまった。Application.Runの代わりにCallByNameを利用したCollectionの...以前、Collectionのバブルソートを記事にした。前回はトランプを使ってマージソートを説明した。はてなブログPro弓道と英語が趣味のVBAプログラマーです。大阪でシステム運用の仕事をしています。このブログに掲載しているコードは利用規約の範囲で自由にお使いください。VBAの無料入門教材を配布していますので、VBAを初めてみたい方、ぜひお立ち寄りください。Amazonアソシエイト・プログラムの参加者です。はてなブログをはじめよう!t-homさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。