概要
前回はリニアサーチという検索アルゴリズム作成として、検索対象の値を発見した時の処理を作りました(前回の記事)。今回は値を発見した時、どの配列で見つけたかと、発見できなかった時の処理を作ります。以下フローチャートでイメージを掴みましょう。

再度リニアサーチの概要を解説します。別名全数探索とも言い、総当たりで検索します。アルゴリズムもシンプルでコードが書きやすい反面、動作が遅くなるリスクもあるアルゴリズムです。
動作は大きく3つに分けられます。
①配列のデータを見る
②中のデータが探したいデータか判定する
③データ発見時、未発見時の処置
と分けて考えます。基本的に①②をループし、データが発見時、未発見時にそれぞれの手順を実行します。これが手順③になります。今回も1〜10の値を適当に配列に放り込み、10がどの配列にあるのか総当たりで探します。前回の①②に追加する形で以下のコードを書きます。
コード
#include <stdio.h>
#define NUM 10 //配列要素数
int arr[NUM]={5,2,8,9,1,4,10,6,3,7};
int val=10; //探したい値
int main()
{
for(int i=0;i<NUM;i++)
if(arr[i]==val) //値をみつけた場合
{
printf("%s%d%s%d\n","arr[",i,"]=",arr[i]);
return 0;
}
printf("%s\n","Not found!");
return 0;
}
Option Explicit
Const NUM As Integer = 10
Sub searchRenear()
Dim arr() As Variant
Dim val As Integer
Dim i As Integer
arr = Array(5, 2, 8, 9, 1, 4, 10, 6, 3, 7)
val = 10 '探したい値
For i = 0 To NUM
If (arr(i) = val) Then '値をみつけた場合
Debug.Print ("arr(" + CStr(i) + ")=" + CStr(arr(i)))
Exit Sub
End If
Next i
Debug.Print ("Not found!")
End Sub
上記コードを実行すると6の配列に探したい値、つまり10が格納されていることが分かります。そして次のreturn(Exit Sub)が大事で、値を見つけた為そのあとのプログラムを動かす必要が無いのでreturn(Exit Sub)で関数から抜けます。そうしないと次の発見できなかった時の処理が動いてしまいます。試しにreturn(Exit Sub)を消して動作させてみたり、valの値を変えてどのように動くかチェックしましょう。
リニアサーチはこれで完成です。大事なのはループと条件文を合わせて使うことです。動きをしっかり理解しましょう。次回は検索アルゴリズムの2分探索について解説していきます。