シーケンシャルサーチ(LinearSearch)
説明
検索の目的は、データの中で指定されたデータを探すことであり、中順検索は最も基本的な検索法であり、データの先頭から最後まで探して、データが見つかったかどうかを見ればよい.(ここでは原文とは異なり、順序検索には[ソートされたデータ]は必要ありません)
方法
初心者は順番検索を見て、多くは以下の方法で検索します.
while(i < MAX) {
if(number[i] == k) {
printf(「指定値が見つかりました」);
break;
}
i++;
}
この方法は基本的に間違っていないが、改善することができ、衛兵を設定する方法を利用してif判断式を省くことができ、衛兵は通常数列の最後または最前方に設定され、仮に列の前に設定しておけば(インデックス0の位置)、数列の後方向から前に探し、指定したデータが見つかった場合、そのインデックス値は0ではなく、数列の訪問が終わる前に見つかったことを示し、プログラムの作成にはwhileループを1つ使えばよい.
Cコード(原文コードでは、結果判断に若干の問題があり、ここで修正)
転載先:http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/AlgorithmGossip.htm
検索の目的は、データの中で指定されたデータを探すことであり、中順検索は最も基本的な検索法であり、データの先頭から最後まで探して、データが見つかったかどうかを見ればよい.(ここでは原文とは異なり、順序検索には[ソートされたデータ]は必要ありません)
方法
初心者は順番検索を見て、多くは以下の方法で検索します.
while(i < MAX) {
if(number[i] == k) {
printf(「指定値が見つかりました」);
break;
}
i++;
}
この方法は基本的に間違っていないが、改善することができ、衛兵を設定する方法を利用してif判断式を省くことができ、衛兵は通常数列の最後または最前方に設定され、仮に列の前に設定しておけば(インデックス0の位置)、数列の後方向から前に探し、指定したデータが見つかった場合、そのインデックス値は0ではなく、数列の訪問が終わる前に見つかったことを示し、プログラムの作成にはwhileループを1つ使えばよい.
Cコード(原文コードでは、結果判断に若干の問題があり、ここで修正)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
#define SWAP(x,y) {int t; t = x; x = y; y = t;}
int search(int[]);
int main(void) {
srand(time(NULL));
int number[MAX+1] = {0};
int i;
for(i = 1; i <= MAX; i++)
number[i] = rand() % 100;
printf(" :");
for(i = 1; i <= MAX; i++)
printf("%d ", number[i]);
printf("
:");
scanf("%d", &number[0]);
int find = search(number);
if(find > 0)
printf("
%d ", find);
else
printf("
");
printf("
");
return 0;
}
int search(int number[]) {
int i = MAX;
while(number[i] != number[0]) i--;
return i;
}
転載先:http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/AlgorithmGossip.htm