码迷,mamicode.com
首页 > 其他好文 > 详细

线性检索:顺序检索

时间:2014-08-15 21:12:39      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:顺序检索   哨兵   sentinel   

                                顺序检索

    当我们对所检索序列中元素的分布一无所知或元素本身就是随机分布的时候,顺序检索是常用的方法。

    常用的返回值策略是,若用数组array,从下标0开始存储元素,检索成功则返回相应下标,失败则返回-1。另一种返回策略是:若从下标1开始存储元素,0号位置作为sentinel(哨兵),返回0则表示检索失败。使用这种返回策略会减少循环条件的判断,提高效率。直接看代码

#include<iostream>
using namespace std;
class Elem
{
private:
	int key;
public:
	void setKey(int key)
	{
		this->key = key;
	}
	int getKey()
	{
		return key;
	}
};
int find(int *array, int n, int key)
{
	if (array && n > 1)
	{
		Elem* arr = new Elem[n+1];
		int i;
		for (int i = 0; i < n; i++)
			arr[i + 1].setKey(array[i]);
		//0号位置作为sentinel
		arr[0].setKey(key);
		i = n;
		//查找
		while (arr[i].getKey() != key)
			i--;
		return i;
	}
	return 0;
}
int main()
{
	cout << "------顺序检索---by David---" << endl; 
	int array[] = { 1, 2, 3, 4, 5, 6 };
	int n = sizeof(array) / sizeof(array[0]);
	cout << "原序列" << endl;
	int i;
	for ( i = 0; i < n; i++ )
		cout << array[i] << " ";
	cout << endl << endl; 
	//第一次查找 
	int key = 1;
	cout << "待查找的关键字是 " << key << endl;
	int index = find(array, n, key);
	if (index)
		cout << "查找到的位置是 " << index << endl;
	else
		cout << "查找失败!" << endl;
	cout << endl; 
	//第二次查找 
	key = -1;
	cout << "待查找的关键字是 " << key << endl;
	index = find(array, n, key);
	if (index)
		cout << "查找到的位置是 " << index << endl;
	else
		cout << "查找失败!" << endl;	
	system("pause");
	return 0;
}
运行
bubuko.com,布布扣


小结

把0号位置作为哨兵,从后往前检索,可能代码并不简练,但思想值得借鉴。



专栏目录




线性检索:顺序检索,布布扣,bubuko.com

线性检索:顺序检索

标签:顺序检索   哨兵   sentinel   

原文地址:http://blog.csdn.net/zhangxiangdavaid/article/details/38589627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!