→topに戻る →アルゴリズムtopに戻る

ソート Sort

「プログラミングの宝箱 アルゴリズムとデータ構造 」(2003年6月16日 紀平拓男、春日伸弥 ソフトバンククリエイティブ )を参考にしています。

目次

バブルソート Bubble Sort
クイックソート Quick Sort
マージソート Merge Sort
コームソート Comb Sort
単純挿入ソート Insert Sort
2分挿入ソート Binary Insert Sort

バブルソート Bubble Sort  →目次に戻る

【5冊の本の並べ替え】
5冊の本(5個のデータ)を並べ替えることを考えます。

①まず、本を左から順に眺めていきます。すると2冊目と3冊目の順序が間違っていることがわかります。そこで、2冊目と3冊目を入れ替えます。
②さらに左側を順に眺めていくと、4冊目と5冊目も順序も逆です。これも入れ替えます。
③右端までいったので、先頭に戻って再び順に眺めていきます。すると1番目と2番目が逆ですので入れ替えます。
④さらに左側を順に眺めて最後までいったら、再び先頭に戻り、先頭から最後まで順序がすべて正しければ完了です。

【プログラムによる並べ替え】
上の処理をCプログラムにすると以下のようになります。


【実行結果】

これが「バブルソート」と呼ばれる方法で、小さい要素が泡のように上がってくることから名づけられたようです。
2013.5.29開始

【バブルソートの改良】
バブルソートには「ループが1回終了するごとに、配列の後方要素は確実にソート済になっている」という性質があります。
これを利用すると「繰返しの回数」を約半分に減らすことができます。
下のリストの右側が改良版です。
繰返し回数が増えるごとに、わざわざ配列最後尾まで確認しないでいいように工夫しています。

一般にいう「バブルソート」は、この改良版を指します。

クイックソート Quick Sort  →目次に戻る

【並べ替えの方法を工夫する】
問題を簡略化して、「A~Zの26文字を並べ替える」ことを考えます。

①ある適当な値(文字/数)を決めて(上の例ではM)、それより大きいものは後ろへ、小さいものは前へ移動する。
②2つに分けたそれぞれのグループのなかで、また適当な値(上の例ではFとS)を決めて、そのグル―プ内でそれより大きいものは後ろへ、小さいものは前へ移動する。
③また、それぞれの…、と、①~②の操作を繰り返す。
④それ以上グループ分けできなくなったら終了。

【クイックソートのプログラム】

マージソート Merge Sort  →目次に戻る

コームソート Comb Sort  →目次に戻る

単純挿入ソート Insert Sort  →目次に戻る

2分挿入ソート Binary Insert Sort  →目次に戻る

program code
Courier New