二分查找又称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)。
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
算法要求:
- 必须采用顺序存储结构。
- 必须按关键字大小有序排列。
二分查找的递归实现
1 int Search(int ST[],int low,int high,int key) 2 { 3 int mid; 4 while(low<=high) 5 { 6 mid=(low+high)/2; 7 if(key==ST[mid]) 8 { 9 cout<<"所查找的为第"<<mid+1<<"个"<<endl; 10 return mid; 11 } 12 else if ((ST[low]<=ST[high]&&ST[mid]<=key)||(ST[low]>ST[high]&&ST[mid]>=key)) 13 return Search(ST,mid+1,high,key); 14 else 15 return Search(ST,low,mid-1,key); 16 } 17 cout<<"不存在该元素"<<endl; 18 return 0; 19 }
作者:耑新新,发布于 博客园
转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com