探索 > 線形探索法

線形探索法

データを端から順番にスキャンしながらキーの比較を行う探索法

  • int search(int key) キーを入力して、該当のデータを返す関数。見つからない場合は-1を返す。 計算量:O(n)
struct{
	int key;
	int data;
}table[100]

int n;

int search(int key)
{
	int i = 0;

	while(i < n){
		if(table[i].key == key){
			return (table[i].data);
		}
		i++;
	}
	return -1;
}

番兵(sentinel)の利用

keyの終端のキー値を探索するキーにすることで、探索を高速にする。 探索するキーが最後と終端な場合は見つからなかったとして、-1を返す。

int search(int key)
{
	int i = 0;
	table[99].key = key
	
	while(1){
		if(table[i].key == key){
			return (i == 99 ? -1 : table[i].data);
		}
		i++;
	}
}

サンプルプログラム


参考文献

  • 定本 Cプログラマのためのアルゴリズムとデータ構造(近藤 嘉雪,ソフトバンククリエイティブ,1998)
  • Cをさらに理解しながら学ぶデータ構造とアルゴリズム(森本 逞,共立出版,2007)
最終更新:2011年03月04日 16:51