二分查找模板
2016-08-01 10:11
267 查看
int lower(int l,int r,int key) { while(l<r) { int mid=l+(r-l)/2; if(a[mid]==key) r=mid; if(a[mid]<key) l=mid+1; if(a[mid]>key) r=mid; } return l; } int upper(int l,int r,int key) { while(l<r) { int mid=l+(r-l+1)/2; if(a[mid]==key) l=mid; if(a[mid]<key) l=mid; if(a[mid]>key) r=mid-1; } return l; } int binary(int l,int r,int key) { while(l<r) { int mid=l+(r-l)/2; if(a[mid]==key) r=mid; if(a[mid]<key) l=mid+1; if(a[mid]>key) r=mid; } if(a[l]==key) return l; else return -1; }
binary在找不到相同元素时返回-1,upper和lower会返回满足条件的第一个位置
double fsearch(double l,double r,double key) { while(r-l>e) { double mid=l+(r-l)/2; if(key<mid) r=mid; else l=mid; }return l; }
浮点二分时,不用考虑边界问题
double threesearch(double l,double r) { double m1,m2; while(r-l>e)//e是自定义精度 { m1=l+(r-l)/3; m2=r-(r-l)/3; if(val(m1)<val(m2)) l=m1;//val是自定义函数 else r=m2; } }三分
相关文章推荐
- 二分查找模板
- 数据结构实验之查找四:二分查找模板+STL
- 《ASCE1885的源码分析》の基于冒泡排序的二分查找模板
- 《ASCE1885的源码分析》の基于冒泡排序的二分查找模板
- 排序模板链表的插入存储和二分查找
- 二分查找【模板】
- 二分查找模板
- 二分查找模板
- 简单二分查找模板(查找)
- 【模板】二分查找
- Leetcode ☞ 35. Search Insert Position 【binary search 二分查找 模板】
- C++模板:二分查找
- 常用二分查找模板
- 二分查找c++简单模板
- 快速排序模板和二分查找
- 模板--二分查找
- 基于C++模板的二分查找
- 二分查找模板
- 二分查找 模板(升序数组)
- 二分查找模板