2019/11/02
2、折半查找 ( 折半查找效率比顺序查找效率高 ,但折半查找只适用于 有序表 ,且限于 有序结构)
要求:
1.线性表必须采用 顺序存储结构。
2.表中元素按关键字有序排列。
算法描述: [时间复杂度:O(log2n) ]
int Search_Bin(SSTable ST, KeyTable key){
int low = 1,mid;
int high = ST.length;
while(low<=high){
mid = (low+high) / 2;
if(key==ST.R[mid].key) return mid; //找到待查元素
else if(key<ST.R[mid].key) high=mid-1; //继续在前一子表进行查找
else low=mid+1;//继续在后一子表进行查找
}
return 0; //表中不存在待查元素
}
折半查找递归算法:
int Search_bin(SSTable ST, KeyType key, int low_in, int high_in){
int low = low_in;
int high = high_in;
int mid=mid = (low+high) / 2;
while(low<=high){
if(key==ST.R[mid].key) return mid; //找到待查元素
else if(key<ST.R[mid].key) return Search_bin(ST,key,low,mid-1); //继续在前一子表进行查找
else return Search_bin(ST,key,low,mid+1); //继续在前一子表进行查找
}
return 0; //表中不存在待查元素
}
注意:循环执行条件是 low<=high ,而不是 low<high ,
因为low=high时,查找区间还有最后一个结点,还要进一步比较。
折半查找平均查找长度:[ (n+1)/n ] * [ log2(n+1)-1 ]
原文:https://www.cnblogs.com/LinQingYang/p/11780740.html