我有一个二进制搜索循环,该循环在执行路径中被击中多次。
探查器显示,搜索的划分部分(根据搜索范围的高低索引找到中间索引)实际上是搜索中最昂贵的部分,大约是原来的4倍。
(我认为)对于有效的二进制搜索来说,找到确切的中间值并不重要,它只是中间值附近的值,在任何方向上都没有偏差。
是否有位纠结算法将mid = (low + high) / 2
替换为更快的东西?
编辑:语言是C#,但是等效的位操作在任何语言中都是有效的(尽管它可能没有性能上的好处),这就是为什么我不使用C#标记。
最佳答案
int mid = (low + high) >>> 1;
请注意,当整数溢出成为问题时,请使用“((低+高)/2”)进行中点计算won't work correctly。
关于algorithm - 快速平均而无除法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1020188/