二分查找法原理
作用:二分查找法是快速查找有序数组A中某元素e的下标的方法。
原理:对查找区间[l,h)尽可能分为等长的两个区间[l,m) 与(m,h),然后通过比较e跟A[m]来判断查找元素e,处于[l,m) 还是(m,h),根据新的区间,重复以上步骤,直到搜寻到元素e为止。
代码实现
//非递归方式
int searchBin2(const int& e, int l, int h) {
while (l < h) {
int m = (l + h) >> 1;
if (e < ele[m])
h = m;
else if (e > ele[m])
l = m + 1;
else return m;
}
return -1;
}
//递归方式
int searchBin(const int& e, int l, int h) {
if (l >= h)
return -1;
int m = (l + h) >> 1;
if (e < ele[m])
return searchBin(e, l, m);
else if (e > ele[m])
return searchBin(e, m+1, h);
else
return m;
}
二分查找(不做e == ele[m]的判断,直接分区间)
这一种简洁一点,但是每次查找的时间复杂度都固定为了log(h - l),上种二分查找算法,遇到e =