tips_sorting
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
tips_sorting [2018/01/07 20:44] – 作成 kanemune | tips_sorting [2018/01/07 20:53] (現在) – kanemune | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | # ソートアルゴリズム | ||
+ | (2016/8/10) | ||
+ | |||
+ | アルゴリズムの定番である「データの並び替え(ソートアルゴリズム)」です。 | ||
+ | 今回は入力と出力の配列を分けることで、CSアンプラグド風に「1個の配列で処理することにこだわらない」ようにしてみました。 | ||
+ | |||
+ | |||
+ | ## CSアンプラグドのソーティングアルゴリズム | ||
+ | * 男の子が選択ソートを、女の子がクイックソートを実演しています。 | ||
+ | * 配列のような「1列に並んだ決まった場所に置く」のではなく、「机の上のわかりやすい場所に置く」ことで、「グループからいちばん重いものを探す」「1個を基準に軽いものと重いものに分ける」のようなアルゴリズムの考え方の本質をわかりやすく示せています。 | ||
+ | |||
+ | {{url> | ||
+ | |||
+ | |||
+ | ## 選択ソート | ||
+ | * 元の配列(in)から一番小さい要素を選び、結果の配列(out)に移していきます。 | ||
+ | |||
+ | < | ||
+ | // | ||
+ | | ||
+ | | ||
+ | | ||
+ | 「 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | ## 挿入ソート | ||
+ | * 空の配列(out)を用意して、元の配列(in)の要素を1個ずつoutの適切な場所に入れていきます。 | ||
+ | |||
+ | < | ||
+ | // | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | ## クイックソート | ||
+ | * quick関数は、渡された配列(a)の最後の要素を基準(p)にして、それ以外の要素を「pより小さい値の配列(left)」と「p以上の値の配列(right)」に分けます。 | ||
+ | * そして、「leftをソートした結果」と「p」と「rightをソートした結果」を連結して返します。 | ||
+ | * quick関数の冒頭の「|...|」の部分では、引数(a)に続いて、「; | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | // | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||