查找算法或许没有排序算法那么重要,方法也没有那么多,但是在计算机算法中是不可或缺的。二分查找是典型代表。

二分查找

题目要求:使用二分法在一个有序数组中查找某一元素。
二分查找有以下几个特点:
第一:数组是已经排好序的序列
第二:不断以数组的中间位置为查找目标,判断其是否与要找的值相等,直到找到该值或者数组长度为0为止。
还是代码最有说服力:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int BinarySearch(vector<int>& v,int key)
{
int low=0;
int high=v.size()-1;
int mid;
//数组不存在,返回-1
if(low>high)
return -1;
while(low<=high)
{
//不断折半
mid=low+((high-low)>>1);
if(v[mid]==key)
return mid;
else if(v[mid]>key)
high=mid;
else
low=mid+1;
}
//数组中没有该值也返回-1
return -1;
}