二分查找介绍:
在一个有序数组中寻找目标元素,每次排除一半数据后更新左右查找边界;
比如在1,2,3,4,5,6,7,8,9,10中查找8,步骤如下:
1.左边界1,右边界10: 算中心结点(1+10)/2 = 5,比较5与8, 相等输出,不相等继续:
2.因为5小于8, 所以将左边界1更新为中心结点+1(5+1 = 6),右边界不变:算中心结点(6+10/2=8,比较8与8,相等输出,不相等继续循环当前步骤;
二分查找限制:
必须是有序数组,才可以应用二分查找;
代码:
int search(vector<int>& nums, int target)
{
int left = 0, right = nums.size()-1;
int mid;
while (left <= right)
{
mid = (left + right) / 2;
if (nums[mid] == target) return mid;
else
{
if (nums[mid] > target) right = mid-1;
else left = mid+1;
}
}
return -1;
}