![]() |
||||
配列は,要素が順に並んでいますので, 目的とするキー値の要素に出会うまで, 配列添え字をカウントアップすれば よいことになります。 以下は,キー値3を探索する場合の 添え字のカウントアップの状態を示します。 ![]() しかし,探索しようとするキーが配列に入っているとは限りませんので, 添え字の最大値を監視しておき,添え字の最大値を超えたら, 探索失敗として終了させる必要があります。 たとえば,キー値7を探索しようとして, 添え字をカウントアップすると,以下のように最大値を超えますので, 探索失敗とします。 ![]() この処理をプログラムで表現すると次のようになります。 private int 探索(int V) { int R = -1; for(int i=0; i < myArray.Length; i++) if(V == myArray[i]) { R = i; break; } return R; } ここで,条件の判定が,For文での添え字の判定, 要素の値判定の2箇所にあることに注意してください。 このことをはっきりさせるには,次のように, for文をwhile文に展開させるとよいでしょう。 int i = 0; while( i < myArray.Length) { if(V == myArray[i]) { R = i; break; } i++; } したがって,探索失敗のときの判定回数は, N = myArray.Lengthとして, 2×N+1 となります。 先頭で成功するときは,先頭の判定だけですから, 2回だけの判定となります。 今,配列に含まれているN個のデータを探索しようとすると, 探索回数は, 2+4+6+・・・+2N=2N(N+1)/2=N(N+1) となります。 1個当たり,平均して 平均判定回数=N(N+1)/N=N+1 となりますが,要素数Nが大きくなると, ほぼNに比例するものと考えても構いません。 [確認用プログラム例] ![]()
i ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 上のタイトルをクリックします |
||||