二分查找法
int BinarySearch(List Tbl,ElementType K)
{
int left,right,mid,NotFound=-1;
left=1; // 数组从下标为一的位置开始存放
right=Tbl->length;
while (left<=right)
{
mid=(left+right)/2;
if (K<Tbl->Element[mid])
right=mid-1;
else if (K>Tbl->Element[mid])
left=mid+1;
else return mid;
}
return NotFound;
}
- 二分查找算法具有对数的时间复杂度O(logN)
11个元素的二分查找判定树
- 判定树上每个结点需要的查找次数刚好为该结点所在的层数;
- 查找成功时查找次数不会超过判定树的深度
- n个结点的判定树的深度为[log2n]+1
- AvergeSearchLength=(4*4+4*3+2*2+1)/11=3
二分查找的启示?
- 以树的方式存储数据,以便查找