0

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

1 回答 1

1

在二分搜索中,您基本上有一个三向分支 ><=。如果没有两个比较运算符,就无法在 C++ 中编写此代码,但我希望任何体面的编译器都可以将它们优化为一条用于比较的机器指令,然后是结果的两个条件分支。

于 2013-01-28T16:43:45.037 回答