个人算法复习笔记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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值