1.二分查找,又称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。该算法采用分治思想,将数组分成两个部分,判断目标元素在哪一部分,然后再对目标部分进行查找。
具体实现过程如下:
-
选取数组的中间值mid。
-
将要查找的值target与mid进行比较。
-
如果target等于mid,则返回mid的下标。
-
如果target小于mid,则在左半部分继续查找。
-
如果target大于mid,则在右半部分继续查找。
-
重复上述步骤,直到找到目标元素或者数组已经被遍历完。
二分查找的时间复杂度为O(log n),效率非常高。但是它要求数组必须是有序的,如果数组无序,需要先对数组进行排序
2.递归的方式查找
int binary_search(vector<int>& nums, int target) {
return binar(nums, target, 0, nums.size() - 1);
}
int binar(vector<int>& nums, int target, int left, int right) {
if (left > right) {
return -1;
}
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
return binar(nums, target, mid + 1, right);
} else {
return binar(nums, target, left, mid - 1);
}
}
3.循环的方式查找
int binary_search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1; //定义下标
while (left <= right) { //如果左边的小于右边的
int mid = left + (right - left) / 2; //取中间的
if (nums[mid] == target) { //如果所取的值等于target那么返回mid的值
return mid;
} else if (nums[mid] < target) { //判断大小
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
4.二分查找Python语言版本
def first_bad_version(n):
left, right = 1, n
while left < right:
mid = left + (right - left) // 2
if isBadVersion(mid):
right = mid
else:
left = mid + 1
return left