如果是在一个元素排序有序的数组中查找,可以采用二分查找法
二分查找法的基本思想:对于已按关键字排序的序列,经过一次比较后,可将序列分割成两部分,然后只在有可能包含待查元素的一部分中继续查找,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止
template<class T> //用二分法查找,在元素呈升序排列的数组list中查找值为key的元素
int binSearch(const T list[], int n, const T& key)
{
int low = 0; //用low标记需要查找范围的最小元素
int high = n - 1; //用high标记需要查找范围的最大元素
while (low < high) //low <= high表示整个数组尚未查找完
{
int mid = (low + high) / 2; //求中间元素的下标
if (key == list[mid])
return mid; //若找到,返回下标
else if (key < list[mid])
high = mid - 1; //若key<list[mid],数组查找范围缩小到数组的前一半
else
low = mid + 1; //否则将查找范围缩小到数组的后一半
}
return -1; //没有找到返回-1
}