顺序表查找优化--哨兵编程技巧

节选自《大话数据结构》

/*顺序查找,a为数组,n为要查找的数组个数,key为要查找的关键字*/
int Sequential_Search(int *a, int n, int key)
{
	int i = 0;
	for (i = 1, i <= n, i++)
	{
		if (key == a[i])
		{
			return i;
		}
	}
	return 0;
}

/*缺点:每次循环都需要对i是否越界,即是否小于等于n做判断。
改进:设置一个哨兵。*/
int Sequential_Search2(int *a, int n, int key)
{
	int i = 0;
	a[0] = key; /*设置a[0]为关键字值,即“哨兵”*/
	i = n;  /*循环从数组尾部开始*/
	while (key != a[i]) /*a[0]=key就停止了*/
	{
		i--;
	}
	return i; /*返回0则说明查找失败*/
}
/*优点:在查找方向的尽头放置“哨兵”,免去了老是判断是否越界的烦人事情。
总数据较多时,效率提升很大,是很好的编程技巧。
“哨兵”既可以在数组开始,也可以在末端。*/
发布了39 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wanggong_1991/article/details/97019388