概述
【算法分析】
● 折半查找(Binary Search)也称二分查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
● 折半查找每一次查找都使查找范围缩小一半,与顺序查找相比,很显然会提高查找效率。为了标记查找过程中每一次的查找区间,分别用low和high来表示当前查找区间的下界和上界,mid=(low+high)/2为区间的中间位置。
● 折半查找的查找过程为:
(1)从表的中间记录开始,如果待查值和中间记录的关键字相等,则查找成功;
(2)如果待查值大于中间记录的关键字,则新的查找区间是[mid+1..high];
(3)如果待查值小于中间记录的关键字,则新的查找区间是[low..mid-1]。
重复上述操作,直到查找成功,或者在某步时查找区间为空,则代表查找失败。
【算法代码】
#include<bits/stdc++.h>
using namespace std;
int binSearch(vector<int> &a, int key) {
int low=0;
int high=a.size()-1;
while(low<=high) {
int mid=(low+high)/2;
if(a[mid]>key) high=mid-1;
else if(a[mid]<key) low=mid+1;
else return mid;
}
return -1;
}
int main() {
vector<int> v;
int n;
cin>>n;
for(int i=0; i<n; i++) {
int x;
cin>>x;
v.push_back(x);
}
int key;
cin>>key;
int t=binSearch(v,key);
if(t==-1) cout<<"No found"<<endl;
else cout<<"Index is "<<t<<endl;
return 0;
}
/*
in:
11
5 16 20 27 30 36 44 55 60 67 71
36
out:
Index is 5
---------
in:
11
5 16 20 27 30 36 44 55 60 67 71
65
out:
No found
*/
最后
以上就是瘦瘦皮皮虾为你收集整理的二分查找 ← vector实现的全部内容,希望文章能够帮你解决二分查找 ← vector实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复