📅  最后修改于: 2023-12-03 14:49:02.181000             🧑  作者: Mango
二进制搜索,也称为二分查找,是一种高效的查找算法。它是在有序数组中查找特定元素的算法。
在有序数组中查找某个元素时,可以从中间开始查找。如果中间的元素小于要查找的元素,则在右半部分继续查找;否则,在左半部分继续查找。这样不断缩小范围,最终找到要查找的元素,或者确定没有这个元素。
二进制搜索算法的时间复杂度为O(log n)。
def binary_search(arr, left, right, x):
if right >= left:
mid = left + (right - left) // 2
if arr[mid] == x:
return mid
elif arr[mid] > x:
return binary_search(arr, left, mid - 1, x)
else:
return binary_search(arr, mid + 1, right, x)
else:
return -1
def binary_search(arr, x):
left = 0
right = len(arr) - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] == x:
return mid
elif arr[mid] > x:
right = mid - 1
else:
left = mid + 1
return -1
在C++ STL中,可以使用std::binary_search
函数进行二进制搜索。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> vec { 1, 3, 5, 7, 9 };
if (binary_search(vec.begin(), vec.end(), 5))
cout << "Element found in vector";
else
cout << "Element not found in vector";
return 0;
}
二进制搜索是一种高效的查找算法,时间复杂度为O(log n)。它有多种实现方式,可以使用递归或非递归的方式实现,也可以在C++ STL中使用std::binary_search
函数。