活动地址:CSDN21天学习挑战赛
一、顺序查找算法
顺序查找算法又称顺序搜索算法或者线性搜索算法,是所有查找算法中最基本、最简单的,对应的时间复杂度为O(n)
。
顺序查找是最简单的查找方法。
1.基本思路:
从数组的一边开始,逐个进行元素的比较,直到找到与待查元素相同,则查找成功;若整个数组扫描后,没有找到相匹配的元素,则查找失败。
举个简单的例子,采用顺序查找算法在 {10,14,19,26,27,31,33,35,42,44} 序列中查找 33,整个查找过程如下图所示:
2.算法流程:
1)输入
待查元素key
n个数的序列,通常存放在数组中,元素顺序没有要求。
2)查找过程
从数组一段开始逐个扫描,将每个元素与key进行比较,直到找到所需元素
2)输出
成功:返回元素所在位置的编号
失败:返回-1或自定义失败标志
3.伪代码
i = 1
while i <= A.length
if A[i] == key
return i
i++
return -1
二、算法实现
1.基本算法实现
顺序查找,a为数组,n为要查找的数组元素个数,key为要查找的关键字
int Search_Seq(int *a,int n,int key)
{
int i;
for(i=1;i<=n;i++)
{
if(a[i]==key)
return i;
}
return 0;
}
2.优化
在上述算法实践过程中,每次循环时都要对i是否越界进行判断,有个更好的办法可以避免每次都要进行判断,就是设置一个哨兵。
int Search_Seq2(int *a,int n,int key)
{
int i;
a[0]=key;//哨兵
i=n;//循环从数组尾部开始
while(a[i]!=key)
i--;
return i;//返回零则是查找失败
}
优化后的算法在总数居较多时,可以提高效率。
3.分析顺序查找时间性能
1)最好的情况
在第一个位置就找到,只比较一次,时间复杂度为O(1)
2)最坏的情况
遍历整个集合后仍未找到,比较n+1次,时间复杂度为O(n)
3)平均情况
综合上述两种情况,平均查找次数为(n+1)/2,时间复杂度仍为O(n)