7−1 一次元配列を用いた検索

検索とは、多数のデータのなかから必要なデータを探し出して取り出す処理である。探索のためのアルゴリズムはいくつか確立しているが、ここでは、最も簡単な線形探索法を用いて、配列に格納されたデータを検索してみよう。

 

例題

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が配列のサイズを超えないようにするため。

                &&は、前の条件と後ろの条件を共に満たす時だけ非零を表す。

 

 

次へ