二分法(查找、求上界、求下界)
2016-12-27 07:36
260 查看
【解析】
二分查找的话相信大家都有一定的了解过,其实就是不断的缩小范围,不断的缩小范围话不多说上代码。int erfen(int k[],int n,int k)
{
int left=0,right=n-1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(k[mid]==k)
return mid;
if(k>k[mid])
left=mid+1;
if(k<k[mid])
right=mid-1;
}
return -1;
}那么接下来二分求下界和上界就是我要重点说的了,求下界的话其实就是求下界的函数,当一个元素存在时返回它出现的第一个位置。如果不存在,返回一个下标k:在此处插入元素,原来的元素都往后挪。
kmid]等于p,至少已经找到一个,但前面可能还有,所以区间为[left,mid],继续往前面进行查找。
k[mid]大于p,所求的位置不可能在后面,但可能为mid,区间为[left,mid]
k[mid]小于p,所求的位置不可能在前面,也不会为mid,区间为[mid+1,right]
二分查找的话相信大家都有一定的了解过,其实就是不断的缩小范围,不断的缩小范围话不多说上代码。int erfen(int k[],int n,int k)
{
int left=0,right=n-1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(k[mid]==k)
return mid;
if(k>k[mid])
left=mid+1;
if(k<k[mid])
right=mid-1;
}
return -1;
}那么接下来二分求下界和上界就是我要重点说的了,求下界的话其实就是求下界的函数,当一个元素存在时返回它出现的第一个位置。如果不存在,返回一个下标k:在此处插入元素,原来的元素都往后挪。
int erfenxia(int k[],int n,int p) { int left=0;right=n; while(left<right) { mid=left+(right-left)/2; if(k[mid]>=p) right=mid;//如果相等的话,前面可能还会有所以往前,大于也要往前 else left=mid+1;//小于说明要往后 } return left; }求上界的话其实就是,当元素存在时返回它出现的最后一个位置的后面一个位置。不存在,则返回一个下标k:在此处插入k,原来的元素全部向后移动一个位置,后序列依然有序
int erfen(int k[],int n,int p) { int left=0;right=n; while(left<right) { mid=left+(right-left)/2; if(k[mid]<=p) left=mid+1; else right=mid; } return left; }下界的规律。上界也差不多
kmid]等于p,至少已经找到一个,但前面可能还有,所以区间为[left,mid],继续往前面进行查找。
k[mid]大于p,所求的位置不可能在后面,但可能为mid,区间为[left,mid]
k[mid]小于p,所求的位置不可能在前面,也不会为mid,区间为[mid+1,right]
相关文章推荐
- 二分法(查找元素及其上界与下界)
- 二分查找求上界和下界
- 【java】二分查找 求下界 求上界
- 二分查找求上界 下界
- UVA10487二分查找上界和下界
- ACM:二分查找,以及利用二分法来找上下界
- 二分求解 三角形 stl的应用 涉及范围的二分查找可以先求上界再算下界,结果即上界减下界
- 二分查找上界和下界
- 上界,下界,二分查找
- 数据结构(一)STL二分法查找实现及上下界
- 二分查找(上界,下界)
- 二分查找,二分上界,二分下界
- 折半查找(二分法查找)
- ACdream1171 下界转上界-最大费用可行流
- 用php二分法查找一个值在数组中的位置
- 有序数组的二分法查找关键字
- 二分法-二分查找的应用及三个经典例题
- 二分法查找数组中的元素并返回其对应的索引
- c语言程序之二分法查找
- 用二分法实现文件查找