• 二分查找

折半查找(binary search)又称二分查找,它是一种效率较高的查找方法。但是,折半查找要求线性表是有序表,即表中的元素按关键字有序。(只能以顺序方式存储

只要表中的关键字个数相同,就一定会生成形状相同的判定树,其平均查找长度都相同。

折半查找法在查找不成功时和给定值进行比较的关键字个数最多为「log₂n]+1,即折半查找判定树的高度。(n为长度或关键字个数)

数据结构(知识点碎片四十三)_二叉树

折半查找过程可用二叉树来描述,把当前查找区间的中间位置上的元素作为根,由左子表和右子表构造的二叉树分别作为根的左子树和右子树,由此得到的二叉树称为描述折半查找过程的判定树(decision tree)或比较树(comparison tree)。判定树中查找成功对应的结点称为内部结点,而查找失败对应的结点称为外部结点。构造外部结点的方法是,对于内部结点中的每个单分支结点,添加一个作为它的孩子的外部结点使其变成双分支结点:对于内部结点中的每个叶子结点,添加两个作为孩子的外部结点使其变成双分支结点。判定树刻画了在所有查找情况下进行折半查找的比较过程。

数据结构(知识点碎片四十三)_二叉树_02

int BSearch(int arr[],int low, int high, int key)
{
while(low <= high)
{
int mid = (low + high) /2; 
if(arr[mid] == key)
return mid;
else if(arr[mid] > key)
high = mid - 1; 
else
low = mid + 1;
}
return -1;
}