博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找
阅读量:4217 次
发布时间:2019-05-26

本文共 1022 字,大约阅读时间需要 3 分钟。

一、普通二分查找

int bin_ser(int *a, int size, int key){	int mid, l, r;	l = 0; r = size-1;	while(l <= r){		mid = l + (r-l)/2;		if(a[mid] < key)			l = mid+1;		if(a[mid] > key)			r = mid-1;		else{			return mid;		}		}}

二、查找下界(大于等于key的第一个位置)没找到返回数组长度

int low_bound(int *a, int size,int key){	int l = 0, r = size-1;	int mid, pos;	while(l < r){		mid = l + (r-l)/2;		if(a[mid] < key){			l = mid+1;			pos = l;		}		else{			r = mid;			pos = r;		}	}	if(a[pos] > key || a[pos] == key)		return pos;	return pos+1;}

三、查找上界(大于 key 的第一个位置)没找到返回数组最后元素下标

int upp_bound(int *a, int size, int key){	int l = 0, r = size;	int mid, pos;	while(l < r){		mid = l + (r-l)/2;		if(a[mid] <= key){			l = mid+1;			pos = l;		}		else{			r = mid;			pos = r;		}	}//	if(a[pos] > key)//		return pos;//	return pos+1;	return pos;}

注意 和 low_bound区分 这里 size取的是数组长度 不是size-1 如果取 size-1就要 用注释部分 这里 为了区分 low_bound部分采用了size-1

        这样做 是因为当查找到最后条件都没找见时候 满足 left  < right 右侧是size-1左侧 此时最多取到size-1就出去了 ,也就是 最后数组最后一个元素没有被查找

所以 出while循环后需要判断 是否最后一个满足条件 不满足返回数组最后元素下一个位置(数组长度)满足就返回最后元素的下标

转载地址:http://cmimi.baihongyu.com/

你可能感兴趣的文章
LUA modue require package 区别
查看>>
package.loaded
查看>>
cocoStudio: Button设置锚点问题
查看>>
vld 使用
查看>>
MAC下安装多版本JDK和切换几种方式
查看>>
java.util.concurrent详解
查看>>
java事务大总结(一) 先理解数据库的事务以mysql为例
查看>>
java事务大总结(二) 理解JDBC事务的工作机制
查看>>
java事务大总结(三) 理解学习 JTA(Java Transaction API)
查看>>
java事务大总结(四)spring事务相关大总结
查看>>
驴妈妈管理的一点经验总结
查看>>
IOS开发学习的好资料大搜藏
查看>>
SSH的认证终结(无需密码的git操作或者ssh链接无需密码)
查看>>
Jetty 的工作原理以及与 Tomcat 的比较
查看>>
ssh-keygen的使用方法 注意权限问题
查看>>
zookeeper的server的集群配置实例[张振华-Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第一篇:互联网时代U盘化生存方式 【张振华.Jack】
查看>>
CentOS6.4配置Hadoop-2.6.0集群配置安装指南(经过实战演练)【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第二篇:专注的力量 [张振华.Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第三篇:我的舍与得的2014[张振华.Jack]
查看>>