c++ - 二进制搜索: how to determine half of the array

标签 c++ c binary-search

这两个公式有什么区别

mid = low + (high - low) / 2;


mid = (high + low) / 2;

最佳答案

在第二版中,如果high + low大于int的最大值(假设highint),则它可能会溢出,从而引发未定义的行为。第一个版本解决了该特定错误。
第一个版本仍然存在问题,例如如果low是一个非常大的负数,则该差值仍会溢出。
从c++ 20开始,您应该为此使用 std::midpoint ,它可以处理大量的极端情况,并为所有情况做正确的事情。
这个看似简单的功能实际上很难实现,实际上,Marshall Clow在cppcon 2019上给出了一个小时的talk,其中涵盖了该功能的实现。

关于c++ - 二进制搜索: how to determine half of the array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63847183/

相关文章:

c++ - 在 C 中合并 2 个排序数组

c++ - 如何计算对此函数的递归调用以及正确的答案是什么?

c - 将字符串写入初始化的空白字符数组

c++ - 比较 if 语句中的 int 值

java - 我的二分查找算法有问题吗?

c++ - 使用一个运算符的重载来重载另一个运算符是一种好习惯吗?

c++ - 将 std::map 项设置为 CListBox 的项数据

c++ - Arduino:micros() 中的 for 循环

javascript - javascript中重复的数组中的子字符串二分搜索

performance - 如何提高电子商务网站的搜索性能?