题目:6-13 折半查找 - 基础编程题目集https://pintia.cn/problem-sets/14/exam/problems/type/6?problemSetProblemId=44932&page=0思路:每次查找的区间左端点设为low,右端点设为high,mid=(low+high)/2,第一次查找的区间范围是[0,leghth-1],每次查找都将查找区间的区间中点的值与k比较,因为是递增数列,比k大说明k在中点mid的左边那个区间,下次查找的区间的右端点就是mid-1,比k小下次查找区间的左端点就是mid+1,如果和k相等说明mid就是我们要找的k值的下标,如此循环直至low==high时,mid下标所在的值还不等于k,说明不存在k。
代码如下:
int Search_Bin(SSTable T, KeyType k){
int low=0,high=T.length-1;
while(high>=low){
int mid=(low+high)/2;
if(T.R[mid].key==k){
return mid;
}else if(T.R[mid].key>k){
high=mid-1;
}else{
low=mid+1;
}
}
return 0;
}