活动地址:优快云21天学习挑战赛
经典算法4——折半查找
一、什么是查找?
根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或记录。
若查找表中存在这样一个记录,则称“查找成功”。查找结果给出整个记录的信息,或者指示该记录在查找表中的位置;否则称“查找不成功”。查找结果给出“空记录”或“空指针”。
二、什么是折半查找?
折半查找又称二分查找,它必须在具有顺序存储结构的有序表中进行,先确定待查找记录所在的范围,然后逐步缩小范围,直到找到或确认找不到该记录为止。
三、实例分析
1.例题题目
给定一组数组a[11]={05,13,19,21,37,56,64,75,80,88,92},查找关键字key=64。
2.题目分析
3.代码实现
#include<stdio.h>
int main(){
int a[11]={5,13,19,21,37,56,64,75,80,88,92};
int low=0,high=10;
int Key=64;
int b=0;
while(low<=high){
int mid=(low+high)/2;
if(a[mid]<Key) low=mid+1;
else if(a[mid]>Key) high=mid-1;
else{
b=mid;
break;
}
}
printf("%d %d\n",b,a[b]);
return 0;
}
4.运行结果展示
五、判定树
平均查找长度ASL=1/11*(1* 1+2* 2+3* 4+4*4)=33/11=3
六、时间复杂度与空间复杂度分析
1.时间复杂度
每次将待查找序列区间缩小一半,所以时间复杂度为O(log2n),效率较高。
2.空间复杂度
空间复杂度为O(1)。
六、优缺点分析
1.优点
时间复杂度为O(log2n)查找效率比顺序查找高
2.缺点
要求必须采用顺序存储的有序表,比较麻烦,不适合于链式存储。
—————————————————————————
21天学习挑战赛打卡第二篇,自知知识水平有限,如有不当之处还望批评斧正。
参考文章一头小山猪的一文学懂经典算法系列之:折半查找(附讲解视频)