アルゴリズム+データ構造
    勉強会(3)
   2013-02-18 アロハ)竹腰 彰成
第3回 選択ソート
選択ソートの原理
• 配列上で一番小さいデータを一番左と入れ替える。これを繰り返す。

        3   2      4       1   5


                一番小さいのは?




        1   2      4       3   5
1   2    4      3       5   入れ替え不要


        一番小さいのは?



1   2    4      3       5   入れ替える


             一番小さいのは?



1   2    3      4       5   入れ替え不要


                小さいのは?



1   2    3      4       5   最後の1つは入れ替え不要
選択ソートの計算量
• 計算量:𝑂(𝑛2 )
  • 5個のチェック→4個のチェック→3個→2個→1個
  • 入れ替え回数:(n-1)×(n-1)÷2(三角形の面積)
              1 2      1
            = 𝑛 − 𝑛 −
                   2       2

               1       2       4   3   5


               1       2       4   3   5


               1       2       3   4   5


               1       2       3   4   5
バブルソートとの違い
• 計算量が同じでもちょっとだけ速い
 • 比較回数は同じだが、入れ替える回数が違う
 • バブルソートは何度も入れ替える
 • 選択ソートは入れ替える回数がn回固定
   • 計算量が同じなら、処理1つあたりの速度が軽いほうが有利
• 不安定なソート
 • ソート前の順序が破壊される
   • 一番左側のものが入れ替えられた時にどこに差し込まれるか不定
実習:選択ソートの実装
• 第1回の実習課題を書き換えて、バブルソートを実装してください。
 •   選択ソート関数sentaku_sort()を作る
 •   ランダムなデータを配列に20個用意する
 •   ソート前データを表示する
 •   sentaku_sort()でソートする
 •   ソート後のデータを表示する
• 勉強会の残り時間を使って書いてください。時間のある限り質問を
  受け付けます
• できあがったら提出してください
• 時間に間に合わない場合は宿題にします
次回のために
• 次回「クイックソート」は難易度が跳ね上がります。
• できれば次の単語を予習しておいてください。
 • クイックソート
 • 再帰関数
 • 分割統治法

アルゴリズム+データ構造勉強会(3)