适用条件:
线性表中的记录必须按关键码有序;
必须采用顺序存储。
折半查找的基本思想
(mid=(1+n)/2)
[ r1 … … … rmid-1 ] rmid [ rmid+1 … … … rn ]
如果k<rmid 如果k>rmid
查找左半区 查找右半区
代码:
int LineSearch :: BinSearch1(int k){
int mid, low = 1, high = length; //初始查找区间是[1, n]
while (low <= high) {//当区间存在时
mid = (low + high) / 2;
if (k < data[mid])
high = mid - 1;
else if (k > data[mid])
low = mid + 1;
else
return mid; //查找成功,返回元素序号
}
return 0; //查找失败,返回0
}