データ構造とプログラミング (第3回) 大岩 元 TA: 武田林太郎 SA: 明石 敬 バブルソート • 左から、隣同士比較して必要なら入れ替える これを繰り返す • 不変項: out の右側はソート済 • 比較回数は N*(N-1)/2 -> O(N**2) • 入れ替えはランダムなら 約N**2/4 (逆順なら 比較と同回数) 選択ソート • 最小値を見つけ、先頭と入れかえる。これを 残りに対して繰り返す。 • 不変項: out より左はソート済 • 比較回数は N*(N-1)/2 -> O(N**2) • 入れ替えは N 回 -> 無視してよい 挿入ソート • 不変項: out の左側はソート済 • 未ソートの左端の項目をソート済の適当な所 に挿入する • 最大比較回数は N*(N-1)/2 -> O(N**2) • 平均比較回数は N*(N-1)/4 • 入れ替えは N 状態遷移機械としてのプログラム • プログラムは変数と命令から成る • コンピュータは命令を読み出しながら、変数 の内容を書き換えていく • 変数の値(の集合)が状態を表わしている • 計算とは命令の実行によって(変数の)状態 を変えていくことである • 変数の状態変化を示す表をトレース表と呼ぶ 番兵 • a[0] から a[N-1] の中で searchkey をさが す a[N] = searchkey; i = 0; while(true) { if (a[i] == searchkey) break; i++ } if (i = N) found = false else found = true; 演習問題 • 各ソートプログラムのトレース表を作れ • 普通の線形探索と番兵を使ったものでは、比 較回数がどのように減るか • 挿入ソートに番兵を組み込んで、速度を向上 させよ • 講義・演習の感想を書け
© Copyright 2024 ExpyDoc