折半查找简要概述
折半查找的基本思想:
对于已按关键字排序的序列,经过一次比较,可将序列分割成两部分,然后只在有可能包含待查元素的一部分中继续查找,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不多。
即,一个*前提*:元素**有序**
*核心*:找一次,就切一半
template<typename T> //函数模板
/* 返回数组下标 */
int BinSearch(T list[], int n, T key){ // n为元素个数, key为要查询的值
int mid, low, high; //mid:用来表明中间下标
T midvalue; //中间值
low = 0;
high = n - 1; //对应数组下标
while(low <= high){
//一次循环即一次查找,查找一次,范围减半
mid = (low + high) / 2;
midvalue = list[mid];
if(key == midvalue) return mid;
else if(key < midvalue) high = mid - 1;
else low = mid + 1;
}
return -1;
}