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