最近数据结构学到了查找,发现了顺序查找的哨兵,感觉比较有意思,
对比了加入哨兵的算法和传统查找算法
传统查找算法:
int search(int * a,int k,int len)
{
、 for(int i = 1; i <len-1 ; i++)
{
if (a[i]==k)
{
return i;
}else
{ return 0;//返回0查找失败 }
}
加入哨兵的查找算法:
int search(int * a,int k,int len)
{
a[0]=k;//定义哨兵
int i=len;
while(a[i]!=k)//无论怎样都会一个元素与之匹配,避免了检查是否越界
{
i--;
}
return i;//如果返回值为 1则代表查找失败
}
发现两种算法主要差异为传统算法多了一步检查是否越界的操作,这就会对算法的性能产生影响,不过在数据规模不大的情况下其实没有什么太大的差异(据说大小大于5000时性能就会有很大不同,我没亲测过,不过那个时候还会不会用这种算法来查找还不一定呢)。