【问题标题】:Binary search on sorted vector排序向量的二分搜索
【发布时间】:2014-11-07 22:09:55
【问题描述】:
template <class T, class C>
size_t idx(const std::vector< T >& elements, const C& val)
{
  if (val<elements[0]||val==elements[0])
    return 0;
  int s=elements.size();
  if (val>elements[s-1])
    return s;
  int min=0;
  int max=s-1;
  int mid;
  while (max >= min){
      mid=(max+min)/2;
      if (val<elements[min])
          return min;
      else if (val>elements[max])
          return max+1;
      else if((val==elements[mid])||((val>elements[mid-1])&&(val<elements[mid])))
          return mid;
      else if((val>elements[mid])&&(val<elements[mid+1]))
          return mid+1;
      else if (val>elements[mid+1])
          min=mid+1;
      else 
            max=mid-1;
    }
    return max;
}

这与btree 有关。元素向量已排序。我想在这个向量上找到插入点,如果值恰好在向量中,则返回它的索引。此外,例如,大小为 7 的向量上有 8 个插入点。我不断收到段错误,我认为这可能是:因一个错误或类似错误而关闭,有人可以帮忙吗?谢谢。

【问题讨论】:

  • 无关:我想只是破坏这个并使用像std::lower_bound这样的东西会作弊。
  • 我现在正在使用类似的算法,它可以工作,但无法通过运行时间测试

标签: c++ search binary-search


【解决方案1】:

如果向量大小为 2,则 min == mid == 0max == 1。在代码中,您检查mid - 1 的元素,即-1,因此您的程序表现出未定义的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多