我的二分查找用于在std::vector
中查找有序插入的位置。然而,在我看来,它正在进行一次(或多次?)太多的比较以找到该位置。特别是最后的三元组。我设计错了吗?要清楚,我没有注意到输出中的任何错误。
template<typename T>
size_t find(std::vector<T> data, T value) //returns position value should be inserted at
{
size_t start = 0;
size_t end = data.size();
if (!end) return 0;
size_t diff;
while (diff = (end - start) / 2)
{
size_t mid = diff + start;
if (data[mid].value <= value)
{
start = mid;
}
else
{
end = mid;
}
}
return data[start].value <= value ? end : start;
}
答案 0 :(得分:1)
在二进制搜索中,您基本上有一个三向分支:
>
,<
和=
。如果没有,就无法在C ++中编写它
两个比较运算符,但我希望任何体面的编译器
将它们优化为单机指令
比较,然后在结果上有两个条件分支。