返回信息流二分查找中,STL源码和一些书上的代码计算中点都是:
int mid = lo + (hi - lo) / 2;
请问这和
int mid = (lo + hi) >> 1; //或 (lo + hi) / 2
有什么本质不同?
当元素个数为偶时,好像也就两个算法一个在前半段末尾,一个在后半段开头,但对二分影响好像不大。
那么为什么很少采用第二种写法呢?
谢谢
这是一条镜像帖。来源:北邮人论坛 / cpp / #98558同步于 2018/12/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请问二分查找的中点计算这两者有什么不同?
buyaogaosuta
2018/12/21镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 lanvent 的大作中提到: 】
: 其实第二种的右移和除2也有区别(不谈了有故事
额 请问有什么区别?是C++里算术右移/无符号右移在不同编译器实现不同吗
移位运算比乘除运算速度快吧
【 在 buyaogaosuta 的大作中提到: 】
: 额 请问有什么区别?是C++里算术右移/无符号右移在不同编译器实现不同吗
右移是向负无穷取整,除2是向0取整, 比如(-1)>>1=-1,(-1)/2=0
二分的上下界可能为负数的时候要格外注意|?ω?`)
【 在 buyaogaosuta (buyaoshuochulai) 的大作中提到: 】
: 额 请问有什么区别?是C++里算术右移/无符号右移在不同编译器实现不同吗