検索とは、多数のデータのなかから必要なデータを探し出して取り出す処理である。探索のためのアルゴリズムはいくつか確立しているが、ここでは、最も簡単な線形探索法を用いて、配列に格納されたデータを検索してみよう。
int型配列dataに下図のようにデータが格納されている時、線形探索法を用いてデータを探索する。
データの個数をN(ここではN=10)とするとき、検索は以下の手順で行う。
@添字iに0を入れる。
Adata[i]≠xのとき、iに1を加算する。
Bdata[i]=xまたは、i=NとなるまでAの処理を繰り返す。
Ci<Nのとき、目的のデータは見つかり、配列番号とデータを表示する。
i≧Nのとき、目的のデータは存在せず、"data can't be found"を表示する。
[プログラムの作成]
/*-----------------------------------------------
線形検索法
-------------------------------------------------*/
#include<stdio.h>
#dehine N 10 /*データの個数*/
main()
{
int data[N]={105,244,303,506,13,95,394,55,1,925}; /*検索されるデータ数*/
int i; /*添字*/
int x; /*検索したいデータ*/
/*検索したいデータの入力*/
printf("input search data:");
scanf("%d",&x);
/*検索*/
for(i=0;i<N && data!=x;i++){
}
/*結果の表示*/
if(i<N)printf("data[%2d]=%4d",i,data[i]);
else printf("data can't be found \n");
}
[実行結果]
上のプログラムをコンパイルし、実行してみると以下のようになる。
input search data:
103 入力データdata can't be found
input search data: 105 入力データ
data[0]=105
[流れ図]
解説
【配列のサイズ】 C言語では、配列は第0番目からはじまる。したがって、配列要素数(サイズ)がNである配列では、その添字は0からN−1である。
【線形検索のアルゴリズム】 線形検索は、検索したいデータを配列の先頭のデータから順に比較して、等しいデータを探す手法です。
for(i=0;i<N && data!=x;i++) i<Nは、iが配列のサイズを超えないようにするため。
&&は、前の条件と後ろの条件を共に満たす時だけ非零を表す。
次へ