我的二分搜索是为了在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;
}