mirror of
https://github.com/oxyanyano/2022-WangDao-CS-DS-Notes.git
synced 2026-02-02 18:29:00 +08:00
2.1 KiB
2.1 KiB
折半查找——Binary Search
一、折半查找的定义
折半查找,又叫二分查找。仅适用于有序的顺序表。
二、折半查找的实现
算法思想:每次从中间分,判断自己是哪一半
普通代码:
//查找表的数据结构(动态分配的顺序表)
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
}
三、查找效率分析
四、折半查找判定树的构造
构造:
特性:
查找表有n个关键字,则失败结点有n+1个
与折半查找判定树的高度h有关。高度越小,查找效率越高
最好情况,平均查找长度=O(log_2n)
最坏情况,平均查找长度=O(n)
则时间复杂度=O(log_2n)





