二进制搜索排序的矢量

时间:2014-11-07 22:09:56

标签: c++ search binary-search

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有关。元素矢量排序。我想在这个向量上找到插入点,如果值恰好在向量中,则返回它的索引。此外,例如,在矢量大小上有8个插入点:7。我一直遇到段错误,我认为这可能是:关闭一个错误或类似错误,有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:1)

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