活动地址:优快云21天学习挑战赛
经典算法1——顺序查找
一、什么是查找?
根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或记录。
若查找表中存在这样一个记录,则称“查找成功”。查找结果给出整个记录的信息,或者指示该记录在查找表中的位置;否则称“查找不成功”。查找结果给出“空记录”或“空指针”。
二、什么是顺序查找?
顺序查找法又称为线性查找法,它的方法是将数据一项一项的和要查找的数据按顺序进行比较。其优点是文件在查找前不需要进行任何处理,缺点是查找速度过慢。在最好的情况下就是一次就查找到数据;最差则需要进行n次比较。
三、实例分析
1.例题题目
假设给定一组数组a[10]={21,37,88,19,92,05,64,56,80,75,13},关键字e为64,问需要比较多少次能查找到e。
2.解决题目的代码
int main(){
int a[11]={21,37,88,19,92,5,64,56,80,75,13};
int e=64,k=0;
for(int i=11;a[i]!=e;i--);//从后往前找
if(i==0){//i为0时,有可能找不到
if(a[i]==e) printf("比较次数为%d\n",11-i);
else printf("查找失败!");
}
else printf("比较次数为%d\n",11-i);
return 0;
}
3.运行结果展示
四、时间复杂度与空间复杂度分析
1.时间复杂度
最好的情况是要查找的关键字正好在第一项,此时时间复杂度O(1),最坏的情况是要查找的关键字在最后一项,假设n为表长,则此时的时间复杂度为O(n).
Pi为查找表中第i个记录的概率,等概率的情况下Pi=1/n,其平均时间复杂程度为nP1+(n-1)P2+…+2Pn-1+Pn=1/n*[(n+1)*n]/2=(n+1)/2;因为其系数1/2和+1可以忽略,所以其时间复杂度为O(n).
2空间复杂度
由于此算法原有的元素集合为数组,算法不会改变原有的元素集合,因此空间复杂度为O(1).
五、顺序查找优缺点分析
1.优点
算法简单而且使用面广,对表中记录的存储没有任何要求,顺序存储和链接存储均可,对表中记录的有序性也没有要求,无论记录是否按关键码有序均可。
2.缺点
时间复杂度较大,特别不适用于表长较大的查找表,效率较低。
六、说明
通过参加21天学习挑战赛,我第一次在csdn上发文章,自知知识水平有限,如有不当之处还望批评斧正。
参考文章一头小山猪的一文学懂经典算法系列之:顺序查找(附讲解视频)