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

节选自《大话数据结构》

/*顺序查找,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则说明查找失败*/
}
/*优点:在查找方向的尽头放置“哨兵”,免去了老是判断是否越界的烦人事情。
总数据较多时,效率提升很大,是很好的编程技巧。
“哨兵”既可以在数组开始,也可以在末端。*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值