整列と探索
◆整列方法
大小の順に並べ替える方法。
基本交換法、基本選択法、基本挿入法、シェルソート、クイックソート、ヒープソート、
マージソートなどがある。
*昇順
小さい順に並べ換える
*降順
大きい順に並べ換える
○基本交換法(バブルソート)
隣り合うデータの大小を比較し、順に並べる。
○基本選択法
データの最大値あるいは最小値を選択し、データの最初か最後に置くことを繰り返し
順に並べ る
○基本挿入法
整列済みのデータに、新たにデータを挿入することを繰り返しデータを順に並べる。。
○シェルソート
データを一定の間隔ごとに挿入法で整列、最後は間隔を1にして基本挿入法でデータ
を順に並べ る
○クイックソート
中間となる基準値を決め、大きな値のグループ、小さな値のグループに分ける。
再び、それぞれのグループの基準値を決め、グループ分けを行い整列していく。
○ヒープソート(整列2分木法)
ヒープの根から最大値を取り出し、配列の最後に置く、さらにヒープを再構成し繰り返し
ながらデータを整列していく。
○マージソート
データを複数のデータ群に分割、整列し、最後に整列されたデータ群を併合する
◆探索法
配列やファイルから、特定の条件に合うデータを探し出す方法。
○線形探索
・データ群から探索キーと同じキー値をもつデータを順に探索していく
・データは整列しておく必要はない
・平均探索回数 (n+1)/2
・最大探索回数 n
*nはデータ件数
○2分割探索法
・データ群を中央で2分割することを繰り返し、探索キーと同じキー値を持つデータを絞り
込み探索する
・データを整列しておく
・平均探索回数 log2n
・最大探索回数 log2n+1
○ハッシュ表探索
・ハッシュ関数を用いてデータの格納位置を得る
・1回で探索できる
★★★宿題:二種向け★(2000/5/24)
n
個のデータをバブルソートを使って整列するとき,データの比較回数はどれ
か。
ア n
イ n log n
ウ n(n−1)/2
エ 2^n
(解答例)
バブルは隣り合うデータを比較し、交換する。
このような場合は数字を入れて見るがいちばんですね。
.3.2.4.1のデータを昇順にバブルソートすると。
ここでデータ数を4個にしたのはlogを計算しやすくするため。
1回目
| 2 | 3 | 1 | 4 |
| 2 | 3 | 4 | 1 |
| 2 | 3 | 1 | 4 |
2回目
| 2 | 3 | 1 | 4 |
| 2 | 1 | 3 | 4 |
3回目
| 1 | 2 | 3 | 4 |
比較回数は6回です。
ア:データ数は4なので4回。×
イ:4log4=4log2^2=4×2log2=4×2=8 8回 ×
ウ:(4×3)/2=6 6回 ○
エ:2^4=16 16回 ×
■解答■(宿題メールより)
二種午前平成12年春問17
> バブルソート
>
隣り合うデータ同士を比較して、逆の順番であるときはそれらのデータを入れ替
>
える。この操作を繰り返していくことで、データを整列させることができる。
> (第二種情報処理技術者試験直前整理特大号
P75より)
>
> 5個の下記のデータを小さい順にソートします。
> 5,3,4,2,1 (5,3の比較)
> 3,5,4,2,1 (5,4の比較)
> 3,4,5,2,1 (5,2の比較)
> 3,4,2,5,1 (5,1の比較)
>
> 3,4,2,1,5 (3,4の比較)
> 3,4,2,1,5 (4,2の比較)
> 3,2,4,1,5 (4,1の比較)
> 3,2,1,4,5 (4,5の比較)
> 3,2,1,4,5 (3,2の比較)
> 2,3,1,4,5 (3,1の比較)
> 2,1,3,4,5 (3,4の比較)
> 2,1,3,4,5 (4,5の比較)
> 1,2,3,4,5 (1,2の比較)
> 1,2,3,4,5 (2,3の比較)
> 1,2,3,4,5 (3,4の比較)
> 1,2,3,4,5 (4,5の比較)
> 16回の比較が行われます。といっても答えが無いので意味が違うようで・・・
> ちょっと分かりませんでした。
どうもありがとうございました。比較で,8番目の(4,5の比較)等はやり
ません。整列済みの場所を記憶して,比較をしないようにします。ですから下の
ようになります。
> 5個の下記のデータを小さい順にソートします。
比較前の並び
----------------------
> 5,3,4,2,1 (5,3の比較)
> 3,5,4,2,1 (5,4の比較)
> 3,4,5,2,1 (5,2の比較)
> 3,4,2,5,1 (5,1の比較)
>
> 3,4,2,1,5 (3,4の比較)
> 3,4,2,1,5 (4,2の比較)
> 3,2,4,1,5 (4,1の比較)
>
> 3,2,1,4,5 (3,2の比較)
> 2,3,1,4,5 (3,1の比較)
>
> 1,2,3,4,5 (1,2の比較)
以上,5を比較するときは,4 + 3 + 2 + 1 = s
で,s を求めます。
s = 4 + 3 + 2 + 1
s = 1 + 2 + 3 + 4
-------------------
2s = 5 + 5 + 5 + 5
= 5 * 4
s = (5 * 4)/2 でした。
> バブルソートのアルゴリズム
> → http://cec.te.kyusan-u.ac.jp/w3/tom/TEXT/Exercise1/8/sld001.htm
> アルゴリズムから考えると、n個のデータの比較回数は、
> (n-1)+(n-2)+・・・+1
> これは、初項1,公差1,項数n-1
の等差数列の和であるから
> (n-1)*{2*1+((n-1)-1)*1}/2 = n(n-1)/2
どうもありがとうございました。
> http://www.soi.wide.ad.jp/class/97001/slides/04/022.html
どうもありがとうございました。バブルソートの図は縦に描くと,いいですよ。
そうするといかにも泡(バブル)が上がっていくように見えます。
>消去法でいくとエが残るのですが、「データ個数の2乗」だと思うので
>正解はn^2ではないでしょうか?
どうもありがとうございました。「データ個数の2乗」ではなくて,
「データ個数の2乗にだいたい比例」です。
> ア:?
> イ:クイックソートの平均比較回数
> ウ:正解
> エ:クイックソートの最高比較回数
どうもありがとうございました。
>「嵯峨乃の情報処理用語辞典」を参照しました。2nとは、2のn乗のことです
>よね?
どうもありがとうございました