折半查找(二分查找,仅适用于有序的顺序表)
//折半查找
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;
}
折半查找判定树的构造:
如果当前low和high之间有奇数个元素,则mid分隔后,左右两部分元素个数相等
如果当前low和high之间有偶数个元素,则mid分隔后,左半部分比右半部分少一个元素
折半查找判定树中,若,则对于任何一个结点,必有:右子树结点数-左子树结点树=0或1
折半查找的判定树一定是平衡二叉树,折半查找的判定树中,只有最下面一层是不满的,因此,元素个数为n时树高
判定树结点关键字:左<中<右,满足二叉排序树的定义
失败结点:n+1个(等于成功结点的空链域数量)
算法思想:
1.在索引表中确定待查记录所属的分块(可顺序,可拆半)
2.在块内顺序查找