我们先来看一个单词:
1)Sequential Search(顺序查找):那么顺序查找是什么呢?举个栗子,相信大部分同学都与我一样,无比怀念高中时代无忧无虑的日子;那时候的我们,书桌上总是摆满了各式各样的课本资料习题册(除了我hh);你是否拥有这样的小伙伴,她的习题资总是直接摊在书桌上,每次找课本都乱找一气(本人无疑)?你是否拥有这样的小伙伴她的书总是用书夹整整齐齐的摆放?顺序查找就好比我从我的课桌上散列的课本习题册的集合中找一本数学习题册,由于我的懒散,课本都是随意无序躺着的,我只能一本一本的找,直到找到为止(害。);即从表中的第一个(或最后一个)元素开始,逐一对比关键字和给定值比较;例如给定值’数学习题册‘,那么就查找集合表中的哪一个关键字与给定值符合。
2)顺序查找算法(时间复杂度为O(n))
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;
}
3)顺序查找算法优化(没有优化之前每次查找后都需要判断下表是否越界;这里的优化在,从数组尾部开始循环,起始端设置哨兵站岗,若是最后访问到哨兵没有查询到结果,则查询失败,省略判断数组越界)
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;
}