【无标题】

二分查找之如何选取中间值

1、 int mid = (right + left) / 2
  在数学中这是最常用的求线段中点的方法,如果将其直接用到编程中是不行的,因为没有考虑编程中各个数据类型的存储空间大小(不同的的数据类型所对应的空间大小是不一样的——可以保证存储空间的有效利用)。如果在编程中采用该方法必须要保证数据的有效性,一般来说int类型为4字节共32位,所以一个int能够表示的数据的范围为: [−231, 231− 1],表示为十进制为:[-2147483648 ~ 2147483647]。如果int+int超出了int数据类型的范围则会出现“溢出”。从而导致“数据出错”。但是如果像python编程语言,会自动将所谓的“溢出型”整数数据转换成长整型变量。
在这里插入图片描述

2、 int mid = (right - left) / 2 + left
  该方法可以有效的避免第一个公式出现的问题——溢出,但是其运算速度还有待改进。只要运行时间足够就可以使用该式子。
在这里插入图片描述

int mid = ((right - left) / 2) + left;

3、 int mid = ((right - left) >> 1) + left
  该方法使用右移运算符>>,运算结果正好能对应一个整数的二分之一值,这就正好能代替数学上的除2运算,但是比除2运算要快。
  右移一位相当于除2,右移n位相当于除以2^n。

int mid = ((right - left) >> 1) + left;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值