二分查找

来源:互联网 发布:怎么运营淘宝直播 编辑:程序博客网 时间:2024/05/21 13:06

二分查找

一、二分查找的使用条件
       二分查找又称折半查找,在有序的数据集中,依次与中间元素比较,需要获取中间元素的下标,故需要以下二个条件:
     1、顺序存储数据结构
     2、有序
二、二分查找实现
       //二分查找(前提:arr已从小到大排序
       template<typename T>       int binarySearch(T arr[],int length,T key)       {          int beginIndex = 0;          int endIndex = length - 1;          while(beginIndex <= endIndex)          {                  //取中间元素的下标                   int midIndex = (beginIndex + endIndex) >> 1;                  if(arr[midIndex] == key)// 中间元素等于key,查找成功                   {                           return midIndex;                  }                  else if(arr[midIndex] > key)//中间元素大于key,只需从前半部分查找key                   {                           endIndex = midIndex - 1;                  }                  else//中间元素小于key,只需从后半部分查找key                   {                           beginIndex = midIndex + 1;                   }//end of else            }//end of while          return -1;//未找到key,返回-1         }//end of func
三、二分查找递归实现(效率较低,不推荐)
       //二分递归查找(前提:arr已从小到大排序
       template<typename T>       int binarySearch(T arr[],int beginIndex,int endIndex,T key)       {            if(beginIndex > endIndex)            {                    return -1;            }            else            {                    int midIndex = (beginIndex + endIndex) >> 1;                    if(arr[midIndex] == key)//中间元素等于key,返回下标                     {                            return midIndex;                    }                    else if(arr[midIndex] > key)//中间元素大于key,递归在前半部分递归查找                     {                            return binarySearch(arr,beginIndex,midIndex - 1,key);                    }                    else//中间元素小于key,递归在后半部分递归查找                     {                             return binarySearch(arr,midIndex+1,endIndex,key);                    }//end of inner else            }//end of outer else      }//end of func



原创粉丝点击