1.二分搜索 — 思路
如果是有序数组,可以使用二分搜索,最坏时间复杂度为O(logn)
- 假设在[begin,end)范围内搜索某个元素 v,mid == (begin + end)/ 2
①、如果v < m,去[begin , mid)范围内二分搜索
②、如果v > m,去[mid + 1, end)范围内二分搜索
③、如果v == m ,直接返回 mid
end指的是数组长度。
2.二分搜索 — 实例
3.二分搜索 — 实现
#include<iostream>
using namespace std;
int binarySearch(int *arr , int low , int high , int target)//递归实现
{
int middle = (low + high)/2;
if(low > high)
return -1;
if(arr[middle] == target)
return middle;
if(arr[middle] > target)
return binarySearch( arr , low , middle - 1 , target);
if(arr[middle] < target)
return binarySearch( arr , middle + 1 , high , target);
};
int binarySearch1(int a[], int n , int target)//循环实现
{
int low = 0 ,high = n , middle;
while(low < high)
{
middle = (low + high)/2;
if(target == a[middle])
return middle;
else if(target > a[middle])
low = middle +1;
else if(target < a[middle])
high = middle;
}
return -1;
};
int main()
{
int a[10] = {5,6,7,8,9, 10 , 11, 12 ,13, 14};
int index = binarySearch( a , 0 , 9 , 12);
cout<<index<< endl;
int index2 = binarySearch1(a,10,12);
cout<<index2<< endl;
system("pause");
}