6.3 折半查找
大约 1 分钟
6.3 折半查找
6.3.1 折半查找的定义
折半查找
,又叫二分查找
。仅适用于有序的顺序表
。
6.3.2 折半查找的实现
算法思想
:每次从中间分,判断自己是哪一半
普通代码:
//查找表的数据结构(动态分配的顺序表)
typedef struct{
ElemType *elem; //指向“动态”分配的数组的指针
int TableLen; //查找表的当前长度
}SSTable;
//折半查找
int Binary_Search(SSTable L, ElemType key){
int low =0, high = L.TableLen-1, mid;
while(low <= high){
mid = (low + high)/2; //取中间值
if(L.elem[mid] == key){
return mid; //查找成功,则返回所在位置
}else if(L.elem[mid] > key){
high = mid - 1; //从前半部分继续查
}else{
low = mid + 1; //从后半部分继续查
}
}
return -1; //查找失败,返回-1
}
6.3.3 查找效率分析
6.3.4 折半查找判定树的构造
构造:
特性:
查找表有n个关键字,则失败结点有n+1个
与折半查找判定树
的高度h有关。高度越小,查找效率越高
最好情况,平均查找长度=
最坏情况,平均查找长度=
则时间复杂度
=