纠正我的次优二分搜索

时间:2013-01-28 16:32:28

标签: c++ performance algorithm optimization

我的二分查找用于在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;
}

1 个答案:

答案 0 :(得分:1)

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