递归形式二分查找

来源:互联网 发布:app无网络提示 编辑:程序博客网 时间:2024/05/22 04:24

在进行二分查找时,最需要注意的有以下几点:

  1. 要查找的对象是否是有序的,是升序的还是降序的,不同的顺序有不同的处理方法
  2. 给出查找对象的区间,是 [ ],还是 [ )
  3. 递归出口,根据给出的区间递归出口要注意,[ ]对应出口为left <= right,[ )对应出口left < right
以下程序是默认为升序排列,使用的是 [ ) 区间进行二分查找的一个模板函数,函数返回的是目标所对应的下标:
template<class T>int BinaryFind(T* arr, int left, int right, T key){if (arr){//递归出口if (left < right){//平均值的一种求法(避免数据溢出问题)int mid = ((left ^ right) >> 1) + (left & right);if (arr[mid] < key){//因为给出的是[ )形式的区间,所以mid要加上1return BinaryFind(arr, mid + 1, right, key);}else if (arr[mid] > key){//因为给出的是[ )形式的区间,在这mid不用加1return BinaryFind(arr, left, mid, key);}else{return mid;}}}return -1;}
                                             
0 0
原创粉丝点击