顺序查找
顺序查找又叫线性查找,是最基本的查找技术,他的查找过程是:从表中第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,者查找成功,找到所查的记录;如果直到最后一个(或者第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。
顺序表查找算法
/*顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键字*/
int Sequential_Search(int *a,int n,int key)
{
int i;
for(i=1;i<n;i++)
{
if(a[i]==key)
return i;
}
return 0;
}
顺序表查找优化
看到这里并非足够完美,因为每次循环都需要对是否越界,即是否小于n做判断。事实上,还可以有更好一点的办法,设置一个哨兵,可以解决不需要每次让i与n作比较。
/*有哨兵顺序查找*/
int Sequential_Search2(int *a,int n,int key)
{
int i;
a[0]=key; //设置a[0]为关键字值,称为哨兵
i=n; //循环从数组尾部开始
while(a[i]!=key)
{
i--;
}
return i;//返回0,说明查找失败
}
对于这种算法来说,查找成功最好的情况就是在第一个位置就找到了,算法时间复杂度为O(1),最坏情况是在最后一个位置才找到,需要进行n次比较,时间复杂度为O(n),当查找不成功需要在n+1次比较,时间复杂度为O(n)。
平均查找次数为(n+1)/2,最终时间复杂度为O(n)。