个人算法复习笔记1-二分查找

个人算法复习笔记1-二分查找

二分查找的前提是此数组已经有序,所以接收一个key值和一个已经排序的Vector容器,算法使用两个变量lo,hi来记录两端,每次计算中间值与key比较,如果kye小于中间值则,key一定在中间值左方,所以hi=mid-1。反之,key>mid,则key一定在中间值右方,则lo=mid+1,如果找到key=中间值则搜索完毕。如果lo>hi则说明没有查找到。则放回-1;

该算法的性能:如果数组中有N个数据,则采用库函数的快速排序的效率大概是NlogN,而二分查找需要logN时间。所以该算法总体是NlogN数量级

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int  binarysearch(int key, vector<int> &a)
{
   int lo=0,hi=a.size();//设定两端
  while(lo<=hi)
{
   int mid=lo+(hi-lo)/2;//取得中间值
if(key<a.at[mid])
hi=mid-1;
else if(key>a.at[mid])
lo=mid+1;
else
return mid;
}
return -1;
}
int main()
{
    int n,key,temp;
cin>>n;
vector<int>  a;
ifstream in=("1.txt");//读取文件
if(in==null)//文件为空
cout<<"flase"<<endl;
else
for(int i=0;i<n;i++)
{in>>temp;
a.push_back(temp);}//读取数据
a.sort();//二分查找之前需要排序
cin>>key;
int result=binarysearch(key,a);
cout<<result<<endl;
return 0;
}
发布了12 篇原创文章 · 获赞 4 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览