シーケンシャルサーチ(LinearSearch)

1386 ワード

説明
検索の目的は、データの中で指定されたデータを探すことであり、中順検索は最も基本的な検索法であり、データの先頭から最後まで探して、データが見つかったかどうかを見ればよい.(ここでは原文とは異なり、順序検索には[ソートされたデータ]は必要ありません)
方法
初心者は順番検索を見て、多くは以下の方法で検索します.
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