当前位置: 首页 > news >正文

在线模版下载网站/网络稿件投稿平台

在线模版下载网站,网络稿件投稿平台,广州网站建设公司推荐,建设银行 钓鱼网站【算法思想】 二分查找又称折半查找。对排好序的数组&#xff0c;每次取这个数和数组中间的数进行比較&#xff0c;复杂度是O(logn) 如:设数组为a[n],查找的数x, 假设xa[n/2]。则返回n/2; 假设x < a[n/2]&#xff0c;则在a[0]到a[n/2-1]中进行查找&#xff1b; 假设x > a…

【算法思想】

二分查找又称折半查找。对排好序的数组,每次取这个数和数组中间的数进行比較,复杂度是O(logn)

:设数组为a[n],查找的数x,

假设x==a[n/2]。则返回n/2;

假设x < a[n/2],则在a[0]到a[n/2-1]中进行查找;

假设x > a[n/2],则在a[n/2+1]到a[n-1]中进行查找。

长处是比較次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。

条件:查找的数组必需要为有序数组。

【递归方法源代码】

/*  
arrat:数组 , low:上界;  high:下界;  target:查找的数据。 返回target所在数组的下标  
*/  
int binarySearch(int array[], int low, int high, int target) {  int middle = (low + high)/2;  if(low > high) {  return -1;  }  if(target == array[middle]) {  return middle;  }  if(target < array[middle]) {  return binarySearch(array, low, middle-1, target);  }  if(target > array[middle]) {  return binarySearch(array, middle+1, high, target);  }   
} 

【非递归方法源代码】

/*  
arrat:数组 。 n:数组的大小;  target:查找的数据; 返回target所在数组的下标  
*/  
int binarySearch2(int array[], int n, int target) {  int low = 0, high = n, middle = 0;  while(low < high) {  middle = (low + high)/2;  if(target == array[middle]) {  return middle;  } else if(target < array[middle]) {  high = middle;  } else if(target > array[middle]) {  low = middle + 1;  }  }  return -1;  
}  

递归与非递归方法,应该注意到,递归方式high是上界。也就是array的lenth()-1。变换 mid 的时候有增1和减1操作。

非递归的方法是size()是上界,也就是array的lenth(),变换 mid 的时候有增1操作而没有减1操作。

这 2 点一定要引起重视!!!

【STL方法实现二分查找】

STL中关于二分查找的函数主要有三个。各自是lower_bound/upper_bound/ 
binary_search。

这三个函数都运用于有序区间,当然这也是二分查找思想运用的前提。以下逐一对这三个函数进行剖析。
这三个函数都包括在算法库中。因此首先应该包括头文件。例如以下所看到的:

#include <algorithm>
using namespace std;
lower_bound算法返回一个非递减序列[first, last)中的第一个大于等于val的位置。 
upper_bound算法返回一个非递减序列[first, last)中的第一个大于val的位置。

ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)
ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,const T& val, Compare comp);
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last,const T& val, Compare comp);
STL源代码实现

Template <class ForwardIterator, class T>  
bool binary_search(ForwardIterator first, ForwardIterator last, const T& value) {  ForwardIterator i = lower_bound(first, last, value);    //这里的实现就是调用的lower_bound ,而且假设元素不存在那么lower_bound指向的元素一定是 operator 为ture的地方。

return i != last && !(value < *i);// 返回是否查找到,而不是元素索引 }

 
 

參考详址:

http://blog.csdn.net/luoweifu/article/details/16656737
http://blog.csdn.net/u012878643/article/details/46723609


http://www.lbrq.cn/news/750835.html

相关文章:

  • 夏天做哪些网站致富/长沙seo全网营销
  • 做自适应网站注意事项/苏州优化排名seo
  • 网页购买/seo搜索引擎优化怎么优化
  • 哪些门户网站可以做推广/如何在百度上发表文章
  • 企业网站建设方案范本/中国十大营销策划公司排名
  • ui设计网站建设是什么/电商代运营公司排名
  • 庆阳网站网站建设/网络推广岗位职责和任职要求
  • 网站建设框架怎么做/收录好的网站
  • 网站排名优化原理/网站查询域名解析
  • dreamweaver怎样用框架做网站/搜索引擎优化规则
  • 做网站的越来越少了/国家卫健委每日疫情报告
  • 有专门教做家具的网站/大数据查询个人信息
  • 平顶山网站建设费用/推广营销企业
  • 做基因互作的网站/网站seo检测工具
  • 卡盟网站建设/好消息疫情要结束了
  • 岚县网站建设/网络公司网络营销推广方案
  • 厂房设计装修公司/盛大游戏优化大师
  • 杭州网站建站/地推app接任务平台
  • 装修广告做哪个网站最好看/网销怎么做才能做好
  • 汕头建站平台/公众号营销
  • 有哪些做汽车变速箱的门户网站/百度一下官方入口
  • 广州软件开发公司排名/东莞seo网站制作报价
  • 专业做阿里巴巴网站的公司/网店怎么开
  • 乐山 网站建设/百度推广开户费
  • 做进口产品的网站/杭州seo培训
  • 怎么制作网站模板/如何自己开发一个平台
  • 模板做的网站不好优化/泰安seo公司
  • 长沙网站开发培训学校/百度的合作网站有哪些
  • 做网站时图片的分辨率是多少/怎么制作一个网站
  • 移动网站建设的前期规划内容/百度关键词排名突然下降很多
  • 学习Python中Selenium模块的基本用法(5:程序基本步骤)
  • 《后室Backrooms》中文版,购物误入异空间,怪物追逐,第一人称冒险逃生
  • 【数据分析】比较SparCC、Pearson和Spearman相关性估计方法在合成组学数据上的表现
  • Effective C++ 条款45:运用成员函数模板接受所有兼容类型
  • 云原生俱乐部-RH124知识点总结(1)
  • 【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数)